`` 數組的includes方法在日常的編程中比較常用到,其作用就是判斷某一數據是否在數組中,通常來說,數組中的數據如果是數字,布爾值,或者字元串的話,都是能夠進行判斷的 例如: ``` [1,2,3,4].includes(3) // true [1,2,3,4].includes(5) // f ...
``
數組的includes方法在日常的編程中比較常用到,其作用就是判斷某一數據是否在數組中,通常來說,數組中的數據如果是數字,布爾值,或者字元串的話,都是能夠進行判斷的
例如:
[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
如果是對象的話,那麼會有一個有趣的現象發生
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中存的數據是p1, p2兩個數據的引用地址,所以返回值是false;
arr.includes(p1)
的話,結合下圖來看,等同於[0000, 0010].includes(0000)
, 所以是true.
再下一行,p3的申明賦值在記憶體總開闢了一個新的地址,這個地址指向真實數據的地址,所以p3和p1的地址是不一樣的, 從下圖可以看到, p3對應地址的值雖然和p1的一樣,但是,它也並沒有指向p1。
當然,如果p3的賦值方式是 p3 = p1 的話,那麼 arr.includes(p3)的值就是true了,因為p1的地址賦給了p3, 那麼p3指向的就是p1所代表的對象了。
雖然javascript是一門動態語言,但是在一些複雜對象的使用上和C這樣的靜態語言是很相似的。而javascript較C而言,它本身不需要做取指針操作,當一個變數的值是一個引用對象時,變數等於自動取了指針。所以說,上面例子中 p3 = p1, 就是指針賦值過程。