一:null,undefined
null是關鍵字
null含義是“非對象",常用來描述“空值”
type of null; => object
它可以表示 數字,字符串,對象是“無值”的
undefined是預定義的全局變量,它的值就是“未定義”。(與null不一樣,它不是關鍵字)
undefine 表明更深層次的“空值”。表明變量沒有初始化。
typeof undefined; => undefined
如果查詢對象屬性或數組元素的值返回 undefined ,說明這個屬性或元素不存在
如果函數沒有任何返回值,則返回undefined
引用沒有提供實參的函數形參的值,也會得到 undefined
null與undefined 都不存在任務屬性和方法
null == undefined; =>true
null === undefined; =>false
null == false; => false 注意 null 與 false不等,但在希望是布爾值的地方,null是假值
null ? 1 : 0; =>0
undefined == false; =>false 注意 undefined 與 false不等,但在希望是布爾值的地方,undefined是假值
undefined ? 1: 0; =>0
二:運算符 typeof
typeof是一元運算符,放在其它單個操作數的前面,操作數可以是任意類型。返回值為表示操作數類型的一個字符串
typeof undefined; => undefined
typeof null; =>object
typeof true或false; =>boolean
typeof 任意數字或NaN; =>number
typeof 任意字符串; =>string
typeof 任意函數; =>function
typeof 任意內置對象(非函數); =>object
typeof 任意宿主對象; =>由編譯器各自實現的字符串,但不是“undefined”,“boolean”,“string”,或"number"
常這樣用:
(typeof value == 'string')...
typeof運算符還可以帶括號,看起來更像是函數
typeof (i)
三:運算符instanceof
instanceof 運算符希望左邊操作數是一個對象,右邊操作數是一個對象的類。如果左邊的對象是右邊類的實例,則返回true,否則返回false
需要注意:所有對象都是 Object 實例。
計算過程:計算 o instanceof f,會首先計算 f.prototype,然后中在原型鏈中查找 f,如果找到,那么o 是f的實例。表達式返回true。
原型鏈。。
四:運算符==和===
javascript對象的比較是引用的比較,而不是值的比較。對象和其本身相等,和其它任何對象都不相等。
=== 是嚴格相等運算符,它首先計算兩個操作數的值,然后比較兩個值。比較過程中沒有任何類型轉換
- 如果兩個值類型不同,則它們不相等
- 如果兩個值,一個是null,一個是undefined,則它們不相等
- null===null; =>true
- undefined === undefined; =>true
- null === undefined; =>false
- 如果其中一個值是 NaN,或者兩個都是NaN,則它們不等。(NaN與其它任務值都是不等的,包括它本身,通過 x !==x 可以判斷x 是否為NaN)
- 如果兩個值為數字且數值相等,則它們相等。同時 0===-0返回true
- 如果兩個值都是字符串,且所含的對應位上的16位數完全相等,則它們相等。如果它們的長度和內容不同,則它們不等
- 如果兩個引用指向同一個對象,數組或函數,則它們相等。如果指向不同的對象,盡管它們的屬性完全一樣,也是不相等的
==是相等運算符,但比較并不嚴格。如果兩個操作數不是同一類型,則會嘗試一些類型轉換,然后比較.
- 如果兩個操作數的類型相同,則與 ===的比較規則一樣
- 如果兩個操作數的類型不同,也可能認為它們相等,類型轉換規則如下
- 如果一個值為null另一個為undefined,則它們相等
- 如果一個值為數字,另一個為字符串,先將字符串轉換為數字,然后再用轉換后的值比較
- 如果其中一個值是true,則將其轉換為1再進行比較。如果是false,則轉換成0
- 如果一個值是對象,另一個值為數字或字符串,則將對象轉換成原始值后再比較
- 其它不同類型間的比較均不相等
例:“1” == true;
先將true 轉為 1,然后再將 “1”轉為 1,比較結果為 true
五:運算符in
in 運算符希望它的左操作數是一個字符串,或者可以轉換成字符串。右操作數是一個對象。如果右側的對象擁有一個名為左側操作數值的屬性名,則返回true
六:運算符 eval()
eval()只有一個參數,如果傳入的不是字符串,則直接返回這個參數。如果是字符串,則將其作為javascript代碼進行編譯。如果編譯失敗,則拋出一個語法錯誤異常。如果編譯成功,則開始執行這段代碼。并返回字符串中的最后一個表達式或語句的值。如果最后一句沒有值,則返回undefined。
eval()使用了調用它的作用域環境。
因此:
var x = 1;
eval('x'); => 1
eval('var y=3;');
y; =>3
ECMAscript 3標準規定不允許給eval()賦與別名。如果通過別名來調用的話,將會拋出一個異常。