搬家篇三
== ! //true ==> "" == false
123 ^ //123 ==> 123 ^ 0
~{} //-1 ==> ~0
{} >= //true ==>因為大於等於的比較,不是相等的比較,所以[object object] >=[object object]
[null] == "" //true ==> [""] == ""
+undefined //nan
//由以下變化可以證得:
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型別
+ "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"
1.null和undefined是相等的值得注意的是:物件間的》=與==(!=)比較方式是不同的,前者是tostring()返回值的比較,後者是引用位址的比較2.要比較相等之前,不能將null和undfined轉換成其他任何值
3.如有乙個運算元為nan,相等操作符返回fasle,不相等操作符返回true, nan不等於nan
4.兩個物件之間的比較,兩者指向同乙個物件(位址相同),相等操作符返回true,否則返回false
當都是兩邊都是字串時,按字元編碼大小進行比較
當一方運算元為boolean,string,object,轉成number型別的數值再進行比較;
console.log("nan" == nan); //false
console.log(undefined == null); //true
console.log({} >= ); //true
console.log( != {}); //true
console.log({} == ); //false
console.log([1] == [1]); //false
console.log(null == 0); //false
Javascript 隱式轉換
確定兩個變數是否相等是程式設計中的乙個非常重要的操作。在比較字串 數值和布林值的相等性時,問題還比較簡單。但在涉及到物件的比較時,問題就變得複雜了。最早的 ecmascript 中的相等和不等 操作符會在執行比較之前,先將物件轉換成相似的型別。後來,有人提出了這種轉換到底是否合理的質疑。最後,ecm...
Scala 學習筆記之隱式引數和隱式轉換並用
隱式轉換條件 1.當表示式型別與預期的型別不同時 2.當物件訪問乙個不存在的成員時 3.當物件呼叫某個方法,而該方法的引數宣告與傳入引數不相匹時。隱式轉換搜尋範圍 1.位於源火目標型別伴生物件中的隱式函式。2.位於當前作用域可以以單個識別符號指代的隱式函式。隱式引數條件 函式中引數帶有implici...
Scala隱式轉換之隱式引數 1
函式或者方法可以帶有乙個標記為implicit的引數。在這種情況下,編譯器將會查詢預設值,提供給該函式或者方法。示例 case class d left string,right string def quote title string implicit d d d.left title d.ri...