1. 程式人生 > >javaScript學習之隱式轉換

javaScript學習之隱式轉換

搬家篇三

開胃菜

[] == ![]                  //true  ==> "" == false
123 ^ []                   //123   ==> 123 ^ 0
~{}                        //-1    ==> ~0
{} >= {1,2}                //true  ==>因為大於等於的比較,不是相等的比較,所以[object Object] >=[object Object]
[null] == ""               //true  ==> [""] == ""

值得注意的操作符:

  • 一元操作符:通過Number()進行轉換;其中包括*號運算子,/號運算子,都是經Number()轉換
+undefined   //NaN
  • 邏輯運算子:!等價於Boolean(),將運算元進行布林值型別轉換
  • 位操作:~, |, &, ^;當一邊運算元為NaN時,可等價於運算元為0;
//由以下變化可以證得:
NaN ^ NaN ^ NaN = 0
  • 加號運算子,比較複雜

優先順序最高的是字串,任何運算元與字串相加都將其String(x)成字串,再進行字串拼接

console.log("a" + 1);           //"a1"
console.log("a" + "1");         //"a1"
console.log("a" + false);       //"afalse"
console.log("a" + undefined);   //"aundefined"
console.log("a" + NaN);         //"aNaN"
console.log("a" + null);        //"anull"
console.log("a" + {});          //"a[object Object]"

其次number,而object在正常情況下輸出的就是string型別

//console.log(1 + "1");     //"11"
console.log(1 + 1);         //2
console.log(1 + true);      //2 
console.log(1 + undefined); //NaN
console.log(1 + NaN);       //NaN
console.log(1 + null);      //1
console.log(1 + {});        //"1[object,Object]"

當一方為Boolean,或者兩方都是Boolean時,都將其進行Number處理,同理undefined與null也一樣

console.log(true + true);      //2 
console.log(true + undefined); //NaN
console.log(true + NaN);       //NaN
console.log(true + null);      //1
console.log((true + [NaN]));   //"trueNaN"
  • 減號,則將兩邊都進行Number()處理
  • 比較運算:==, >, <, >=, >=, != 遵循規則(摘自高程3):
1.null和undefined是相等的 2.要比較相等之前,不能將null和undfined轉換成其他任何值 3.如有一個運算元為NaN,相等操作符返回fasle,不相等操作符返回true, NaN不等於NaN 4.兩個物件之間的比較,兩者指向同一個物件(地址相同),相等操作符返回true,否則返回false

值得注意的是:物件間的>=與==(!=)比較方式是不同的,前者是toString()返回值的比較,後者是引用地址的比較 當都是兩邊都是字串時,按字元編碼大小進行比較當一方運算元為boolean,string,object,轉成number型別的數值再進行比較;

console.log("NaN" == NaN);         //false
console.log(undefined == null);    //true
console.log({} >= {1:2});          //true
console.log({1:2} != {});          //true
console.log({} == {1:2});          //false
console.log([1] == [1]);           //false
console.log(null == 0);            //false