成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

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

zhjx922 / 2720人閱讀

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

今天看Array.prototype.map() 在 MDN 的條目的時(shí)候發(fā)現(xiàn)

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 也被認(rèn)為數(shù)組的該 index 的元素被指定了值。
Array.prototype.map()callback 函數(shù)在這個(gè)元素未被賦值的時(shí)候,或者是被刪除掉的時(shí)候不會被調(diào)用。

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 的結(jié)果不一樣,和 a4 又有什么聯(lián)系呢?

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
其實(shí) var u = undefined 也被認(rèn)為是賦予了值

new Array(2) 創(chuàng)建一個(gè)長度為 2 的,但是沒有 properties 的數(shù)組。[undefined,undefined] 返回一個(gè)長度為 2 的,有 2 個(gè) properties 的數(shù)組(分別叫做 "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"
};

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

a.x === undefined
// true

應(yīng)該使用:

// 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 之后調(diào)用 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 的時(shí)候起作用,并且會使得 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

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/79585.html

相關(guān)文章

  • 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 的等式成立?  咋地,知道如何實(shí)現(xiàn)?想罵人有不  現(xiàn)在我們一起來分解思路:  我們先來講講寬松相等== 和嚴(yán)格相等 ===,這兩個(gè)都能用來判斷兩個(gè)值是否相等,但們明確上文提到的等于指的是哪一種,二者的區(qū)別看下:  (1) 這兩個(gè)基礎(chǔ)直接的區(qū)別:  (1.1) 不同類型間比較,== 比較轉(zhuǎn)化成同一類型后的值看值是否相等,...

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

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

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

      最近嘗試在 useEffect 使用 async 的時(shí)候會報(bào)錯(cuò),因此,本篇文章就是想喝大家說說為什么?也解讀其中緣由?! 【唧w代碼分析  執(zhí)行 mountEffect  當(dāng)頁面中使用 useEffect 的時(shí)候,會在初始化的時(shí)候執(zhí)行 mountEffect 如下:  useEffect:function(create,deps){   currentHookNameInDev="us...

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

    摘要:如果左側(cè)表達(dá)式的值為真值,則返回右側(cè)表達(dá)式的值否則返回左側(cè)表達(dá)式的值。遇到真愛就返回中運(yùn)算符的運(yùn)算法則如下返回遇到的第一個(gè)真值或者最后一個(gè)值。輸出為將表達(dá)式進(jìn)行強(qiáng)制轉(zhuǎn)化為值的運(yùn)算,運(yùn)算結(jié)果為或者。 bool值轉(zhuǎn)換 數(shù)據(jù)類型 bool值轉(zhuǎn)化 undefined undefined 轉(zhuǎn)化為 false Object null 轉(zhuǎn)化為false,其他為 true Boole...

    hufeng 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<