簡體   English   中英

有人可以在javascript中解釋這種行為嗎?

[英]Can someone explain this behavior in javascript?

在Firefox中測試:

a = [] + 0;
b = 0;

alert(a); // 0
alert(b); // 0

alert(!a); // false
alert(!b); // true

+ 連接運算符導致toString評估為0

因此, a值為"0" ,而b值為0

來自ECMAScript 11.6.1加法運算符(+)

加法運算符執行字符串連接或數字加法。 生產AdditiveExpression:AdditiveExpression + MultiplicativeExpression的計算方法如下:

  1. 讓lref成為評估AdditiveExpression的結果。

  2. 設lval為GetValue(lref)。

  3. 設rref是評估MultiplicativeExpression的結果。

  4. 設rval為GetValue(rref)。

  5. 設lprim為ToPrimitive(lval)。

  6. 設rprim為ToPrimitive(rval)。

  7. 如果Type(lprim)是String或Type(rprim)是String,那么

    一個。 返回串聯ToString(lprim)后跟ToString(rprim)的結果的字符串

  8. 將添加操作的結果返回到ToNumber(lprim)和ToNumber(rprim)。 見11.6.3下面的注釋。

注1:在步驟5和6中對ToPrimitive的調用中沒有提供提示。除Date對象之外的所有本機ECMAScript對象都處理沒有提示,就像提供了提示號一樣; 日期對象處理缺少提示,就像提供了提示字符串一樣。 主機對象可以以某種其他方式處理缺少提示。

注2:步驟7與關系運算符(11.8.5)的比較算法的步驟3的不同之處在於,使用邏輯或運算代替邏輯運算。

[] + 0是一個字符串。
當您在Javascript中編寫a + b時,引擎會將ab都轉換為基元。
如果至少有一個結果基元是一個字符串,它將執行字符串連接; 否則,它將執行數字加法。

要將對象(例如數組)轉換為基元,引擎將調用valueOf() ,如果其結果不是基元,則將調用toString()
對於數組, valueOf()返回原始數組(不是基元), toString()返回數組內容的逗號分隔字符串。

因此, [] + 0變為"" + 0 ,即"0"

非空字符串永遠不會偽造。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM