摘要:今天看在的條目的時候發現寫了以下代碼來測試了一下得到以下輸出指定也被認為數組的該的元素被指定了值。的函數在這個元素未被賦值的時候,或者是被刪除掉的時候不會被調用。不會影響原型鏈上的參考
今天看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); // truedelete 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
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...
要是別人問您:如何讓 x 等于 1 且讓 x 等于 2 且讓 x 等于 3 的等式成立? 咋地,知道如何實現?想罵人有不 現在我們一起來分解思路: 我們先來講講寬松相等== 和嚴格相等 ===,這兩個都能用來判斷兩個值是否相等,但們明確上文提到的等于指的是哪一種,二者的區別看下: (1) 這兩個基礎直接的區別: (1.1) 不同類型間比較,== 比較轉化成同一類型后的值看值是否相等,...
摘要:提示函數通常用于檢測和的結果,以判斷它們表示的是否是合法的數字。與運算多個布爾類型相與,若其中存在一個及以上的,則結果為,否則為。 以下所用測試代碼可以訪問 RunJS 查看 undefined 與 null 如果定義一個變量卻不賦值,則其默認等于 undefined: var foo; console.log(foo); // undefined 也可以對其賦值 undefined:...
最近嘗試在 useEffect 使用 async 的時候會報錯,因此,本篇文章就是想喝大家說說為什么?也解讀其中緣由。 具體代碼分析 執行 mountEffect 當頁面中使用 useEffect 的時候,會在初始化的時候執行 mountEffect 如下: useEffect:function(create,deps){ currentHookNameInDev="us...
摘要:如果左側表達式的值為真值,則返回右側表達式的值否則返回左側表達式的值。遇到真愛就返回中運算符的運算法則如下返回遇到的第一個真值或者最后一個值。輸出為將表達式進行強制轉化為值的運算,運算結果為或者。 bool值轉換 數據類型 bool值轉化 undefined undefined 轉化為 false Object null 轉化為false,其他為 true Boole...
閱讀 3200·2021-11-10 11:36
閱讀 3145·2021-11-02 14:39
閱讀 1726·2021-09-26 10:11
閱讀 4930·2021-09-22 15:57
閱讀 1686·2021-09-09 11:36
閱讀 2053·2019-08-30 12:56
閱讀 3487·2019-08-30 11:17
閱讀 1703·2019-08-29 17:17