成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

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

zhjx922 / 2762人閱讀

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

今天看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).

寫了以下代碼來(lái)測(cè)試了一下

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í)候不會(huì)被調(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,也就是說(shuō),這些指針并不是 undefined 只是他們指向 undefined
其實(shí) var u = undefined 也被認(rèn)為是賦予了值

new Array(2) 創(chuàng)建一個(gè)長(zhǎng)度為 2 的,但是沒(méi)有 properties 的數(shù)組。[undefined,undefined] 返回一個(gè)長(zhǎng)度為 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é)果是不同的,但是不能用===來(lái)判斷
兩種操作都會(huì)得到

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

從原型鏈上來(lái)說(shuō)
delete a.x 之后調(diào)用 a.x 會(huì)從原型鏈上尋找 x
a.x = undefined 之后不會(huì),會(huì)直接返回 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 只會(huì)在 extended.hasOwnProperty("x")) 返回 true 的時(shí)候起作用,并且會(huì)使得 extended.hasOwnProperty("x")) 返回 false
delete 不會(huì)影響原型鏈上的 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)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/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 評(píng)論0 收藏0
  • JavaScript中讓x==1&&x==2&&x==3等式成立演示

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

    3403771864 評(píng)論0 收藏0
  • JavaScript 中的 null undefined NaN 及 &amp;&amp; 與 ||

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

    Chao 評(píng)論0 收藏0
  • useEffect中不能使用async緣由

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

    3403771864 評(píng)論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 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<