国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Array.prototype.map() & null & undefined &

zhjx922 / 2710人閱讀

摘要:今天看在的條目的時候發現寫了以下代碼來測試了一下得到以下輸出指定也被認為數組的該的元素被指定了值。的函數在這個元素未被賦值的時候,或者是被刪除掉的時候不會被調用。不會影響原型鏈上的參考

今天看Array.prototype.map() 在 MDN 的條目的時候發現

callback is invoked only for indexes of the array which have assigned values, including undefined. It is not called for missing elements of the array (that is, indexes that have never been set, which have been deleted or which have never been assigned a value).

寫了以下代碼來測試了一下

var a1 = new Array(1);
var a2 = [null];
var a3 = [undefined];

var a4 = [2];
delete a4[0];

var container = [a1,a2,a3,a4];

var container2 = new Array(4);
for (var i = 0, len = container2.length; i < len; i++) {
    container2[i] = container[i].map( (val) => {
    return 1;
    });
    console.log(container2[i]);
    console.log("---");
}

得到以下輸出

[  ]
---
[ 1 ]
---
[ 1 ]
---
[  ]
---

指定 null 也被認為數組的該 index 的元素被指定了值。
Array.prototype.map()callback 函數在這個元素未被賦值的時候,或者是被刪除掉的時候不會被調用。

container.forEach((item, i) => {
    var array = `a` + (i + 1);
    console.log(`${array}[0] === null :`, item[0] === null);
    console.log(`${array}[0] === undefined :`, item[0] === undefined);
    console.log("---");
});

得到

a1[0] === null : false
a1[0] === undefined : true
---
a2[0] === null : true
a2[0] === undefined : false
---
a3[0] === null : false
a3[0] === undefined : true
---
a4[0] === null : false
a4[0] === undefined : true
---

為什么 a1 和 a3 的結果不一樣,和 a4 又有什么聯系呢?

var x = new Array(2) vs var y = [undefined,undefined]

前者 Creates an array with undefined pointers.var x = new Array(2) 就等于 var x = [ , ]
后者 creates an array with pointers to 3 undefined objects,也就是說,這些指針并不是 undefined 只是他們指向 undefined
其實 var u = undefined 也被認為是賦予了值

new Array(2) 創建一個長度為 2 的,但是沒有 properties 的數組。[undefined,undefined] 返回一個長度為 2 的,有 2 個 properties 的數組(分別叫做 "0", "1" 的,值為 "undefined""undefined"

console.log( 0 in x);
// false
console.log( 0 in y);
// true
delete a.x vs a.x = undefined
a = {
    x: "boo"
};

兩種操作的結果是不同的,但是不能用===來判斷
兩種操作都會得到

a.x === undefined
// true

應該使用:

// If you want inherited properties
"x" in a

// If you don"t want inherited properties
a.hasOwnProperty("x")

delete 刪除的是引用而不是 object 本身

http://stackoverflow.com/questions/742623/deleting-objects-in-javascript

從原型鏈上來說
delete a.x 之后調用 a.x 會從原型鏈上尋找 x
a.x = undefined 之后不會,會直接返回 undefined

var obj = {x: "fromPrototype"};
var extended = Object.create(obj);
extended.x = "overriding";
console.log(extended.x); // overriding
extended.x  = undefined;
console.log(extended.x); // undefined
delete extended.x;
console.log(extended.x); // fromPrototype

delete 只會在 extended.hasOwnProperty("x")) 返回 true 的時候起作用,并且會使得 extended.hasOwnProperty("x")) 返回 false
delete 不會影響原型鏈上的 properties

var obj = {x: "fromPrototype"};
var extended = Object.create(obj);
delete extended.x;
console.log(extended.x); // Still fromPrototype

參考:
delete a.x vs a.x = undefined
JavaScript “new Array(n)” and “Array.prototype.map” weirdness

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/79585.html

相關文章

  • ES5-8 &amp; Polyfilling &amp; Transpilling

    ES7 includes() method Array.prototype.includes(target) determines whether an array includes a certain element, returning True or False as appropriate. String.prototype.includes(targetString) deter...

    chavesgu 評論0 收藏0
  • JavaScript中讓x==1&&x==2&&x==3等式成立演示

      要是別人問您:如何讓 x 等于 1 且讓 x 等于 2 且讓 x 等于 3 的等式成立?  咋地,知道如何實現?想罵人有不  現在我們一起來分解思路:  我們先來講講寬松相等== 和嚴格相等 ===,這兩個都能用來判斷兩個值是否相等,但們明確上文提到的等于指的是哪一種,二者的區別看下:  (1) 這兩個基礎直接的區別:  (1.1) 不同類型間比較,== 比較轉化成同一類型后的值看值是否相等,...

    3403771864 評論0 收藏0
  • JavaScript 中的 null undefined NaN 及 &amp;&amp; 與 ||

    摘要:提示函數通常用于檢測和的結果,以判斷它們表示的是否是合法的數字。與運算多個布爾類型相與,若其中存在一個及以上的,則結果為,否則為。 以下所用測試代碼可以訪問 RunJS 查看 undefined 與 null 如果定義一個變量卻不賦值,則其默認等于 undefined: var foo; console.log(foo); // undefined 也可以對其賦值 undefined:...

    Chao 評論0 收藏0
  • useEffect中不能使用async緣由

      最近嘗試在 useEffect 使用 async 的時候會報錯,因此,本篇文章就是想喝大家說說為什么?也解讀其中緣由。  具體代碼分析  執行 mountEffect  當頁面中使用 useEffect 的時候,會在初始化的時候執行 mountEffect 如下:  useEffect:function(create,deps){   currentHookNameInDev="us...

    3403771864 評論0 收藏0
  • js中的bool值轉換及"&amp;&amp;" 、"||"

    摘要:如果左側表達式的值為真值,則返回右側表達式的值否則返回左側表達式的值。遇到真愛就返回中運算符的運算法則如下返回遇到的第一個真值或者最后一個值。輸出為將表達式進行強制轉化為值的運算,運算結果為或者。 bool值轉換 數據類型 bool值轉化 undefined undefined 轉化為 false Object null 轉化為false,其他為 true Boole...

    hufeng 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<