JavaScript的一些概念: typeof, null, 和 undefined

typeof, null, 和 undefined數組

1. typeof

typeof 操做符返回一個字符串,表示未經求值的操做數(unevaluated operand)的類型。瀏覽器

語法:typeof operand 參數:operand 是一個表達式,表示對象或原始值,其類型被返回。 描述E:此表總結了 typeof 可能的返回值。函數

類型 結構
Undefined "undefined"
Null "object" 
布爾值 "boolean"
數值 "number"
字符串 "string"
Symbol (ECMAScript 6 新增) "symbol"
宿主對象(JS環境提供的,好比瀏覽器) Implementation-dependent
函數對象 (implements [[Call]] in ECMA-262 terms) "function"
任何其餘對象 "object"

實例:編碼

typeof "John"                // 返回 string
typeof ""                    // 返回 string
typeof 3.14                  // 返回 number
typeof true                  // 返回 boolean
typeof false                 // 返回 boolean
typeof [1,2,3,4]             // 返回 object
typeof {name:'John', age:34} // 返回 object

Notes:
在JavaScript中,數組是一種特殊的對象類型。 所以 typeof [1,2,3,4] 返回 object。lua

2. Null

null 是一個 JavaScript 字面量,表示空值(null or an "empty" value),表示 "什麼都沒有"。即沒有對象被呈現(no object value is present)。 null 是一個只有一個值的特殊類型。表示一個空對象引用。它是 JavaScript 的原始值之一。 null 是一個字面量(而不是全局對象的一個屬性,undefined 是)code

Note: 用 typeof 檢測 null 返回是object。
Note: ECMAScript 有 5 種原始類型(primitive type),即 Undefined、Null、Boolean、Number 和 String。對象

實例ip

能夠設置爲 null 來清空對象:
var person = null;     // Value is null, but type is still an object

也能夠設置爲 undefined 來清空對象:
var person = undefined; // 值爲 undefined, type is undefined

3. Undefined

undefined有多重角色,一般狀況下,咱們所說的undefined都指的是全局對象的一個屬性"undefined".文檔

在 JavaScript 中, undefined 是一個沒有設置值的變量。typeof 一個沒有值的變量會返回 undefined。字符串

一個未初始化的變量的值爲undefined. 一個沒有傳入實參的形參變量的值爲undefined. 若是一個函數什麼都不返回,則該函數默認返回undefined.

在JavaScript中,undefined這個詞有多重含義:
(1) 首字母大寫的Undefined表示的是一種數據類型; (2) 小寫的undefined表示的是屬於這種數據類型的惟一的一個值; 但這兩種undefined都只能存在於文檔或規範中,不能存在於JavaScript代碼中.

在JavaScript代碼中,咱們看到的undefined最有多是全局對象的一個屬性,該屬性的初始值是就是前面所說的原始值undefined.
還有種狀況就是,這個undefined是個局部變量,就像其餘普通變量同樣,沒有任何特殊性,它的值不必定是undefined,但一般狀況下都是的.

下面咱們所說的undefined,都指的是window.undefined這個屬性.

實例:

var person; // Value is undefined, type is undefined

可使用嚴格相等運算符來判斷一個值是不是undefined:
var x;
if ( x === undefined ) {
   // 執行到這裏
} else {
   // 不會執行到這裏
}

這裏必須使用嚴格相等運算符===,而不能使用普通的相等運算符==.
由於x == undefined成立還多是由於x爲null,在JavaScript中null== undefined是返回true的.

另外,還可使用typeof來判斷:

var x;
if (typeof x === 'undefined') {
   // 執行到這裏
}

任何變量均可以經過設置值爲 undefined 來清空。 類型爲 undefined. 實例 person = undefined; // 值爲 undefined, type is undefined

4 NaN 值

NaN 是一個全局對象的屬性,表示 Not-A-Number 的值,是一個特殊值。

在編碼不多直接使用到 NaN。一般都是在計算失敗時,做爲 Math 的某個方法的返回值出現的(例如:Math.sqrt(-1))或者嘗試將一個字符串解析成數字但失敗了的時候(例如:parseInt("blabla"))。

NaN 不等於本身, 即 NaN == NaN 返回的是 false 判斷一個值是不是 NaN, 必須使用 Number.isNaN() 或 isNaN() 函數

isNaN() 函數用於檢查其參數是不是非數字值。 isNaN() 函數一般用於檢測 parseFloat() 和 parseInt() 的結果,以判斷它們表示的是不是合法的數字。固然也能夠用 isNaN() 函數來檢測算數錯誤,好比用 0 做除數的狀況。 若是isNaN函數的參數不是Number類型, isNaN()會首先嚐試將這個參數轉換爲數值,而後纔會對轉換後的結果是不是NaN進行判斷。

isNaN(123);   // 返回 false
isNaN(-1.23); // 返回 false
isNaN(5-2);   // 返回 false
isNaN(0);     // 返回 false
isNaN("0");   // 返回 false
isNaN(true);  // 返回 false: 由於Number(true)是1 
isNaN(false); // 返回 false: 由於Number(false)是0 
isNaN(null);  // 返回 false: 由於Number(null)是0 

isNaN("Hello");      // 返回 true
isNaN("2016/07/11"); // 返回 true
isNaN(NaN);       // 返回 true
isNaN(undefined); // 返回 true
isNaN({});        // 返回 true

// dates
isNaN(new Date());                // 返回 false
isNaN(new Date().toString());     // 返回 true

5 undefined 和 Null 的區別

typeof undefined    // 返回undefined
typeof null         // 返回object (bug in ECMAScript, should be null)
null === undefined  // 返回false
null == undefined   // 返回true

6 underfined和"undefined"的區別:

undefined是JavaScript提供的一個"關鍵字",而"undefined"就是一個字符串,只是字符串的內容長得和undefined同樣而已。

typeof undefined    // 返回undefined
typeof "undefined"  // 返回string

參考連接:

http://www.w3school.com.cn/jsref/jsref_isNaN.asp
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/isNaN
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/undefined

相關文章
相關標籤/搜索