今天再學習ts的列舉型別的時候,對ts解釋成js後的**有疑問。帶著疑問,一步步追根溯源,最終有了這篇文章。
這是一段簡單的ts**解析成js**的例子。
左邊是ts**,簡單的宣告乙個列舉型別。 右邊是解析出來的js**。
direction[direction["up"] = 1] = "up";
direction[direction["down"] = 2] = "down";
direction[direction["left"] = 3] = "left";
direction[direction["right"] = 4] = "right";
複製**
這幾句**,引起了我的注意。 因為,這四句**中,有8個賦值操作。
賦值操作1:direction["up"] = 1
賦值操作2:direction[1] = "up"
賦值操作3:direction["down"] = 2
賦值操作4:direction[2] = "down"
賦值操作5:direction["left"] = 3
賦值操作6:direction[3] = "left"
賦值操作7:direction["right"] = 4
賦值操作8:direction[4] = "right"
為什麼會有direction[1] = "up"
這類賦值呢?
經查閱資料發現,原來每個賦值語句都有返回值的(叫返回值可能不太準確,先這麼叫著吧...?)
具體是這樣的:
可以看到,宣告變數的時候,返回值是undefined
,aaa=2
的時候,返回值是2
.
所以賦值的時候,是有返回值。並且這個返回值是賦值號=
右邊的值。如下圖:
所以,上面的ts解析出來的js**就可以讀懂了。
direction[direction["up"] = 1] = "up"
// 相當於
direction["up"] = 1
direction[1] = "up"
複製**
b = a = 10
複製**
以前的認知(可能是學過c和c++的原因,留下了印象。),賦值語句是從右往左執行的。 上面的語句是預設是 10賦值給a,a賦值給b。很簡單,我們知道a
的值是10
,b
的值也是10
。但是,因為a = 10
有返回值(10)
,所以b
的值是從a
來的還是從這個(10)
來的呢?
我們來看乙個例子:
var a =
a.myname = a =
console.log(a) //
console.log(a.myname) // undefined
複製**
按我們正常的理解,連續賦值語句,從右往左賦值,那麼應該是a =
, a.myname = a。所以,輸出的結果應該都是
,但是,事與願違,並不是這個結果。
這是怎麼回事啊?
於是做了以下測試:
var a =
var b = a
b.name = '你好'
console.log(a.name) // 你好
console.log(b.name) // 你好
複製**
上述**解析:
再看乙個例子:
var a =
var b = a
b =
console.log(a.name) // hotao
console.log(b.name) // 你好
複製**
當執行b=
給b賦了乙個新的記憶體位址(a2
),所以,變數a和變數b已經指向不同的位址,他們兩個現在毫無瓜葛了。
我們再反過來看一下連續賦值的問題:
var a =
var b = a
a.myname = a =
console.log(a) //
console.log(a.myname) // undefined
console.log(b) // }
console.log(b.myname) //
複製**
**解析: Python變數賦值的秘密
在python中,我們令乙個變數等於另外乙個變數時,並不是把值傳遞給它,而是直接把指向的位址更改了。我們想要檢視乙個變數在記憶體中的位址,可以通過id 變數 來檢視。我們通過乙個小例子來看看這個有趣的過程。x 12 y 13 id x 1865402384 id y 1865402416 x y i...
Python變數賦值的秘密
在python中,我們令乙個變數等於另外乙個變數時,並不是把值傳遞給它,而是直接把指向的位址更改了。我們想要檢視乙個變數在記憶體中的位址,可以通過id 變數 來檢視。我們通過乙個小例子來看看這個有趣的過程。x 12 y 13 id x 1865402384 id y 1865402416 x y i...
Python變數賦值的秘密分享
在python中,我們令乙個變數等於另外乙個變數時,並不是把值傳遞給它,而是直接把指向的位址更改了。我們想要檢視乙個變數在記憶體中的位址,可以通過id 變數 來檢視。我們通過乙個小例子來看看這個有趣的過程。x 12 程式設計客棧y 13 id x id y x y id x id y 首先給x變數賦...