JavaScript數據類型轉換

數據類型轉換

1. 引入一題目 [] == ![]結果是什么?[] == []結果又是如何呢?

[] == ![]
解析: 轉換順序問題TODO
== 中,左右兩邊都需要轉換為數字然后進行比較。
[] 轉換為數字為0。
![] 首先是轉換為布爾值,由于[]作為一個引用類型轉換為布爾值為true,
因此![]為false,進而在轉換成數字,變為0。
0 == 0 , 結果為true

[] == []
[] == [] ,結果為false? why? 引用和引用比,看地址是否是同一個;所以為false;

引入第二 {} + false; false + {}結果分別是什么?

{} + false
{} 在最開始會被解釋為代碼塊,所以輸出0;

false + {}
輸出 "false[object Object]"

2. JS中類型轉換有哪幾種?

JS中,類型轉換只有三種:

  • 轉換成數字
  • 轉換成布爾值
  • 轉換成字符串

轉換具體規則如下:

注意"Boolean 轉字符串"這行結果指的是 true 轉字符串的例子

類型轉換.png

3. == 和 ===有什么區別?

===叫做嚴格相等,是指:左右兩邊不僅值要相等,類型也要相等,例如'1'===1的結果是false,因為一邊是string,另一邊是number。
復制代碼

==不像===那樣嚴格,對于一般情況,只要值相等,就返回true,但==還涉及一些類型轉換,它的轉換規則如下:

  • 兩邊的類型是否相同,相同的話就比較值的大小,例如1==2,返回false
  • 判斷的是否是null和undefined,是的話就返回true
  • 判斷的類型是否是String和Number,是的話,把String類型轉換成Number,再進行比較
  • 判斷其中一方是否是Boolean,是的話就把Boolean轉換成Number,再進行比較
  • 如果其中一方為Object,且另一方為String、Number或者Symbol,會將Object轉換成字符串,再進行比較
console.log({a: 1} == true);//false
console.log({a: 1} == "[object Object]");//true
復制代碼

4. 對象轉原始類型是根據什么流程運行的?

對象轉原始類型,會調用內置的[ToPrimitive]函數,對于該函數而言,其邏輯如下:

  1. 如果Symbol.toPrimitive()方法,優先調用再返回
  2. 調用valueOf(),如果轉換為原始類型,則返回
  3. 調用toString(),如果轉換為原始類型,則返回
  4. 如果都沒有返回原始類型,會報錯
var obj = {
  value: 3,
  valueOf() {
    return 4;
  },
  toString() {
    return '5'
  },
  [Symbol.toPrimitive]() {
    return 6
  }
}
console.log(obj + 1); // 輸出7
復制代碼

5. 如何讓if(a == 1 && a == 2)條件成立?

其實就是上一個問題的應用。

var a = {
  value: 0,
  valueOf: function() {
    this.value++;
    return this.value;
  }
};
console.log(a == 1 && a == 2);//true

引用鏈接:https://juejin.cn/post/6844903974378668039

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容