運算符優先級
借鑒班上一個同學的說法
袁(一元運算符)術(算術)移位(按位運算符),關系(關系運算符)位(位運算符)繼(邏輯運算符)父(賦值運算符)
運算符優先級
代碼加不加分號的問題
不加分號,解釋器一般根據情況看你后面是否會給你自動加。
通用原則:看后面代碼和當前代碼能不能一起執行,能就合并,不能就分開執行,如果都不能執行,就報錯。
下面是特殊情況
var a=1
var b=2
a
++
b
等價于
var a=1;
var b=2;
a;
++b;
Null和Undefined
null:表示"沒有對象",即該處不應該有值。
(1) 作為函數的參數,表示該函數的參數不是對象。
(2) 作為對象原型鏈的終點。
(3)不能當作變量聲明
Object.getPrototypeOf(Object.prototype)
// null
undefined :表示"缺少值",就是此處應該有一個值,但是還沒有定義
(1)變量被聲明了,但沒有賦值時,就等于undefined。
(2) 調用函數時,應該提供的參數沒有提供,該參數等于undefined。
(3)對象沒有賦值的屬性,該屬性的值為undefined。
(4)函數沒有返回值時,默認返回undefined。
(5)可以當作變量聲明
var i;
i // undefined
function f(x){console.log(x)}
f() // undefined
var o = new Object();
o.p // undefined
var x = f();
x // undefined
參考表
對照表
實際上,undefined值派生自null的,因此ECMA-262規定對它們的相等性測試要返回true
isNaN()
判斷傳入的值是否能轉化為數字
Infinity=
數值轉換
Number
- Boolean值,true和false轉化為1和0
- 數字就是數字
- null值,返回0
- undefined,返回NaN
- 字符串,遵循下列規則
- 只包含數字的字符串,轉為數字,浮點格式和原來保持一致,其他進制轉化為十進制
- 空字符串(不包含任何字符串),轉換為0
- 除了上述格式,轉化為NaN
一元加
將你想操作的數據類型轉換為數字
對象需要先調用他們的valueOf()和toString()
邏輯與的延伸
- 進行布爾值運算 var result=true&&false;
下面我們讓兩個操作數用表達式表示。
var a=1;
var b=2;
a==1&&b==3; //false
-
總結:如果并且 :如果 a...并且b....,那么... ,通常這語句我們用到if語句中。
用于判斷
var a=1;
var b=2;
a==1&&(b=3); // 3
-
總結: 如果那么 :如果a等于1成立的話,繼續運行后面的表達式,如果a不等于1,后面就沒有必要執行,這稱之為短路寫法。
前面是判斷語句,后面是執行語句。
邏輯或的延伸
- 進行布爾值的運算 var result=false||true
var a=1;
var b=2;
a==2||b==2//true
- 總結:或者 :a==2或者b==2,我們要進行什么樣什么樣的操作。
var a=1;
var b=2;
x=a||b //true
- 總結: 如果不...那么 :用于賦值 這也是短路寫法
將邏輯與和邏輯或合并
a&&b||c
其中 a、b、c為表達式 ,如果a執行b否則執行c,
a:為判斷語句
b:為執行語句
c:為執行語句
a滿足的時候執行b,a不滿足的時候執行c
等價于三目運算符 a?b : c 優先級邏輯運算符大于條件運算符
上面通常用于簡單的if else語句,三目運算符用于賦值。