有一個聲明+[[]] + [[]]
。控制檯返回「0」(一個字符串)。 當一個語句是+[[]]
控制檯返回0(一個數字)。 如果+0+0
爲0,第一個如何返回字符串?爲什麼`+ [[]] + [[]]`返回一個字符串?
0
A
回答
3
的語法樹在這裏看起來像
+
/\
/ \
+ [ ]
| |
| |
[ ] [ ]
|
|
[ ]
也就是說,二進制+
的左側操作數是一元+
操作的結果,和右側的操作數的結果[[]]
表達式。
左側是一個數字,根據runtime semantics of the unary +
operator運算符調用ToNumber。
右側是一個對象,該對象在evaluation of the +
operator的第9步中通過ToPrimitive(通過調用對象的toString
方法)投射到字符串基元。對於數組,toString
返回通過逗號連接的數組內容的字符串化形式,在這種情況下,它是空字符串。
您可以通過覆蓋某個對象toString
,看到改變的結果驗證這一點:
var a = [];
a.toString = function() { return "foo"; };
console.log(0 + a);
這將產生"0foo"
。
1
+[[]]
- 有一元操作符。
Unary +運算符將其操作數轉換爲數字類型。一元 - 運算符將其操作數轉換爲數字類型,然後否定它。
你的表達是obviosly +[[]]
加[[]]
其中「[[]]」被轉換爲一個空字符串由於二進制+
運算符。
,因此是0 + '' = '0'
相關問題
- 1. 爲什麼我的字符串返回一個字符?
- 2. 爲什麼則getIdentifier始終爲0返回一個字符串
- 3. 爲什麼這個方法返回一個空字符串?
- 4. 這個__repr__函數爲什麼不返回一個字符串?
- 5. 爲什麼這個方法返回一個字符串?
- 6. 爲什麼[] + []返回空字符串?
- 7. 爲什麼subprocess.popen返回空字符串
- 8. 爲什麼regex.Match返回空字符串?
- 9. 爲什麼不Mockito RETURNS_DEFAULT返回一個默認的字符串?
- 10. 爲什麼glGetProgramInfoLog返回一個空字符串?
- 11. 爲什麼空語句ToString()返回一個空字符串?
- 12. 爲什麼HttpContext.Current.Request.Url.AbsolutePath返回一個空字符串?
- 13. 爲什麼fgets返回一個錯誤的字符串?
- 14. 爲什麼split方法仍然返回一個字符串
- 15. 這段代碼爲什麼不返回一個字符串?
- 16. 爲什麼input()總是返回一個字符串?
- 17. 爲什麼我的函數不返回一個字符串?
- 18. 爲什麼binascii.a2b_hex()返回一個字符串?
- 19. 這是爲什麼返回一個空字符串?
- 20. 爲什麼android.util.Base64返回一個不同的字符串?
- 21. 爲什麼nextLine()返回一個空字符串?
- 22. 爲什麼我的XmlReader會返回一個空字符串?
- 23. 爲什麼Jekyll的Liquid'contains'會返回一個字符串?
- 24. 爲什麼JavaScript this.style [property]返回一個空字符串?
- 25. 爲什麼我不能從AsyncTask返回一個字符串?
- 26. 爲什麼第一個日期字符串返回false?
- 27. 爲什麼GETENV()返回一個非常量字符串
- 28. 返回一個字符串
- 29. 爲什麼id(字符串)不返回字符串的地址
- 30. 爲什麼`request.method`返回一個字符串(而不是一個符號)?
第一個是一個_unary_加,第二個一_binary_之一。不要混淆這些。 – Xufox
javascript很奇怪。這會回答你的問題嗎? :) –
@pro:從哪裏來的字符串? –