最近遇見一道js
的題,題目是這樣的。 var str = 'abc' ;
typeof (str )
;
最開始我以為回傳的是String類型的值!但結果是Number,讓我很費解!
我理解的思路是,先拆開 str , 也就是str = str 1; 這不就是字串拼接麼。返回的還是str啊。
但是當我印出來 str 之後 卻是一個NaN的型別。 typeof(NaN)
就是一個Number型別!
也就是說console.log(str )
console.log(str = str 1)
並不是等價的!
請問這是為什麼? ?
javascript高級程式設計中寫了,
++
和--
是遞增遞減的一元操作符,只能操作一個數據,和加性操作符+
是不一樣的,他首先會把操作數轉換為Number類型,然後進行加一或減一操作。所以
str = str+1
不等於str++
因為在 str++的時候,js已經將str的字串型別隱性轉換成數字型別
console.log(str++) ++會嘗試將str轉為數字,自動轉型不成功變成NaN
console.log(str = str+1) +此時嘗試拼接字串,變成abc1
js中並沒有什麼東西保證 a++ 和 a=a+1 是等價的。
++
只有
重載,+
有
和
重載。就算不考慮行為,類型上已經不等價。其他語言也許有,不該跟JS搞混。
首先,你的理解有誤區,str++ 可以不能完全等同於str+=1.在這裡只需要理解為自增,但是自增只針對數字,所以str++會先進行隱式類型轉換,str的值是' abc'轉換之後是NaN. typeof NaN 回傳值為Number