1. 程式人生 > >陣列Array的toString()方法與a == 1 && a == 2 && a == 3

陣列Array的toString()方法與a == 1 && a == 2 && a == 3

如何讓a == 1 && a == 2 && a == 3成立,首先想到的是陣列。我們知道當複雜型別資料與基本型別資料作比較時會發生隱性轉換,那麼,當a是一個數組時,a == 1,陣列a就會呼叫它的toString方法,而陣列的toString方法會呼叫自身的join()方法:

var a = [1,2,3];console.log(a.join() === a.toString());//true

a == 1 && a == 2 && a == 3相當於呼叫了3次toString方法,如果每次呼叫只取陣列a的一個元素進行比較,那麼這個式子就會成立。而陣列的shift() 方法用於把陣列的第一個元素從其中刪除,並返回第一個元素的值,所以:


var a = [1,2,3]; a.join = a.shift; console.log(a == 1 && a == 2 && a == 3);//true

還有一種方法是這樣的:

var a = { i:1, toString: function () { return a.i++; } } console.log(a == 1 && a == 2 && a == 3);//true

因為a是一個物件,a == 1 && a == 2 && a == 3時也會隱性轉換,呼叫原型鏈上的toString方法,使a.toString()方法返回的是a.i++,而i=1,所以a會依次取值為1,2,3.