null 是一個表示爲「空」的對象,轉爲數值時爲0;
undefined是一個表示"此處無定義"的原始值,轉爲數值時爲NaN
返回 undefined 的典型場景函數
// 變量聲明 var i; i // undefined // 函數沒有返回值 function f() {} f() // undefined // 調用函數時,應該提供的參數沒有提供,該參數等於 undefined function fn(val) { return val; } fn() // undefined // 對象沒有賦值的屬性 var o = new Object(); o.p // undefined
1.parseInt()編碼
parseInt() 方法用於將一個字符串轉爲一個整數,默認是十進制整數
parseInt('10.33') // 10 parseInt('10', 8) // 8
2.parseFloat()code
parseFloat 方法用於將一個字符串轉爲浮點數
parseFloat('3.14') // 3.14 parseFloat('40 years')// 40 parseFloat('y40') // NaN
isNaN 只對數值有效,若是傳入其餘值,會被先轉成數值。isNan 爲true的值,有可能不是NaN,而是一個字符
isNaN('Hello') <=> isNaN(Number('Hello'))
除了Infinity、-Infinity、NaN和undefined這幾個值會返回false,isFinite對於其餘的數值都會返回true
沒法改變字符串之中的單個字符。
length屬性返回字符串的長度,該屬性也是沒法改變的。
btoa('Hello World') // "SGVsbG8gV29ybGQ=" atob('SGVsbG8gV29ybGQ=') // "Hello World"
要將非 ASCII 碼字符轉爲 Base64 編碼,必須中間插入一個轉碼環節。
function base64Encode(str) { return btoa(encodeURIComponent(str)); } function base64Decode(str) { return decodeURIComponent(atob(str)); } base64Encode('你好') // "JUU0JUJEJUEwJUU1JUE1JUJE" base64Decode('JUU0JUJEJUEwJUU1JUE1JUJE') // "你好"
查看一個對象自己的全部屬性,能夠使用Object.keys方法
var obj = { key1: 1, key2: 2 }; Object.keys(obj); // ['key1', key2]
delete命令用於刪除對象的屬性,刪除成功後返回true
var obj = { key: 1 } delete obj.key // true obj.key // undefined
delete 命令只能刪除對象自己的屬性,沒法刪除繼承的屬性對象
var obj = {}; delete obj.toString // true obj.toString // ƒ toString() { [native code] }
toString是對象obj繼承的屬性,雖然delete命令返回true,但該屬性並無被刪除,依然存在。這個例子還說明,即便delete返回true,該屬性依然可能讀取到值。繼承
in 運算符用於檢查對象是否包含某個屬性,若是包含返回true
var obj = { key: 1 } 'key' in obj // true 'toString' in obj // true
in運算符不能識別哪些屬性是對象自身的,哪些屬性是繼承的。因爲對象obj自己並無toString屬性,可是in運算符會返回true,由於這個屬性是繼承的。這是能夠使用對象的hasOwnProperty方法判斷一下,是否爲對象自身的屬性。字符串
for...in循環用來遍歷一個對象的所有屬性。
var obj = { a: 1, b: 2, c:3 }; for (var i in obj) { console.log('鍵名:', i + '; 鍵值:' + obj[i]); } // 鍵名: a; 鍵值:1 // 鍵名: b; 鍵值:2 // 鍵名: c; 鍵值:3
for...in循環有兩個使用注意點。string
對象obj繼承了toString屬性,該屬性不會被for...in循環遍歷到,由於它默認是「不可遍歷」的。it
若是繼承的屬性是可遍歷的,那麼就會被for...in循環遍歷到。可是,通常狀況下,都是隻想遍歷對象自身的屬性,因此使用for...in的時候,應該結合使用hasOwnProperty方法,在循環內部判斷一下,某個屬性是否爲對象自身的屬性。io
var obj = { name: 'wade' }; for (var key in obj) { if (obj.hasOwnProperty(Key)) { console.log(key); } } // name