JavaScript的連續賦值的思考
下面是一個連續賦值的例子:
在這裡面,先創建a對象並添加n:1,
按照我們平常的思維,應該是{n:2}賦值給 a,a的引用改變了,但b仍然是原來的引用,然後再賦值給a.x,這時候a是{n:2,x:{n:2}},也即是a.x={n:2}。但是,很顯然我們的執行結果不是這樣的,為什麼會這樣呢?
其實這是調皮的運算優先順序搞的鬼,a.x成員訪問的優先順序僅次於括弧,成員訪問.訪問的屬性如果不存在就會被創建並且該成員訪問運算式的值是undefined。
下面是一個連續賦值的例子:
在這裡面,先創建a對象並添加n:1,
按照我們平常的思維,應該是{n:2}賦值給 a,a的引用改變了,但b仍然是原來的引用,然後再賦值給a.x,這時候a是{n:2,x:{n:2}},也即是a.x={n:2}。但是,很顯然我們的執行結果不是這樣的,為什麼會這樣呢?
其實這是調皮的運算優先順序搞的鬼,a.x成員訪問的優先順序僅次於括弧,成員訪問.訪問的屬性如果不存在就會被創建並且該成員訪問運算式的值是undefined。