``
數(shù)組的includes方法在日常的編程中比較常用到,其作用就是判斷某一數(shù)據(jù)是否在數(shù)組中,通常來說,數(shù)組中的數(shù)據(jù)如果是數(shù)字,布爾值,或者字符串的話,都是能夠進(jìn)行判斷的
例如:
[1,2,3,4].includes(3) // true
[1,2,3,4].includes(5) // false
[true, false].includes(false) // true
[false, false].includes(true) // false
['foo', 'bar'].includes('foo') // true
['foo', 'bar'].includes('baz') // false
如果是對象的話,那么會有一個有趣的現(xiàn)象發(fā)生
var p1 = { age: 11, name: 'bob'};
var p2 = { age: 13, name: 'kebei'};
var arr = [p1, p2];
arr.includes({ age: 11, name: 'bob'}); // false
arr.includes(p1) // true
var p3 = { age: 11, name: 'bob'};
arr.includes(p3); // false
arr.includes({ age: 11, name: 'bob'})
這行,includes里面是一個字面量對象, 而arr中存的數(shù)據(jù)是p1, p2兩個數(shù)據(jù)的引用地址,所以返回值是false;
arr.includes(p1)
的話,結(jié)合下圖來看,等同于[0000, 0010].includes(0000)
, 所以是true.
再下一行,p3的申明賦值在內(nèi)存總開辟了一個新的地址,這個地址指向真實數(shù)據(jù)的地址,所以p3和p1的地址是不一樣的, 從下圖可以看到, p3對應(yīng)地址的值雖然和p1的一樣,但是,它也并沒有指向p1。
當(dāng)然,如果p3的賦值方式是 p3 = p1 的話,那么 arr.includes(p3)的值就是true了,因為p1的地址賦給了p3, 那么p3指向的就是p1所代表的對象了。文章來源:http://www.zghlxwxcb.cn/news/detail-696537.html
雖然javascript是一門動態(tài)語言,但是在一些復(fù)雜對象的使用上和C這樣的靜態(tài)語言是很相似的。而javascript較C而言,它本身不需要做取指針操作,當(dāng)一個變量的值是一個引用對象時,變量等于自動取了指針。所以說,上面例子中 p3 = p1, 就是指針賦值過程。文章來源地址http://www.zghlxwxcb.cn/news/detail-696537.html
到了這里,關(guān)于由 Array.includes 函數(shù)引發(fā)對引用數(shù)據(jù)類型的思考的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!