數據類型二

null, undefined

null 和 undefined

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

與number相關的全局方法

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 只對數值有效,若是傳入其餘值,會被先轉成數值。isNan 爲true的值,有可能不是NaN,而是一個字符
isNaN('Hello') <=> isNaN(Number('Hello'))

isFinite()

除了Infinity、-Infinity、NaN和undefined這幾個值會返回false,isFinite對於其餘的數值都會返回true

string

沒法改變字符串之中的單個字符。
length屬性返回字符串的長度,該屬性也是沒法改變的。

Base64 轉換

  1. btoa() -> 任意值轉爲 Base64 編碼
  2. atob() -> Base64編碼轉爲原來的值
btoa('Hello World')         // "SGVsbG8gV29ybGQ="
atob('SGVsbG8gV29ybGQ=')    // "Hello World"

非 ASCII 碼 Base64 轉換

要將非 ASCII 碼字符轉爲 Base64 編碼,必須中間插入一個轉碼環節。
function base64Encode(str) {
    return btoa(encodeURIComponent(str));
}
function base64Decode(str) {
  return decodeURIComponent(atob(str));
}

base64Encode('你好')    // "JUU0JUJEJUEwJUU1JUE1JUJE"
base64Decode('JUU0JUJEJUEwJUU1JUE1JUJE')    // "你好"

object

屬性的查看

查看一個對象自己的全部屬性,能夠使用Object.keys方法
var obj = {
    key1: 1,
    key2: 2
};
Object.keys(obj);    // ['key1', key2]

屬性的刪除:delete命令

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 運算符

in 運算符用於檢查對象是否包含某個屬性,若是包含返回true
var obj = { key: 1 }
'key' in obj         // true
'toString' in obj    // true

in運算符不能識別哪些屬性是對象自身的,哪些屬性是繼承的。因爲對象obj自己並無toString屬性,可是in運算符會返回true,由於這個屬性是繼承的。這是能夠使用對象的hasOwnProperty方法判斷一下,是否爲對象自身的屬性。字符串

屬性的遍歷:for...in循環

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

  • 它遍歷的是對象全部可遍歷(enumerable)的屬性,會跳過不可遍歷的屬性。
  • 它不只遍歷對象自身的屬性,還遍歷繼承的屬性。

對象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
相關文章
相關標籤/搜索