数字#
数值分為整數和浮點數,可使用十進制,八進制,十六進制和科學計數法來表示。
var a = 1
var b = 1.1
var c = 067
var d = 0xA
var e = 1.23e7
console.log(a,b,c,d,e)
NaN#
表示一個非數值,任何涉及到 NaN 的操作都會返回 NaN,NaN 與任何值都不相等(包括自身)。
BigInt#
BigInt
用於表示任意長度的整數。
number
類型無法安全地表示大於 (即9007199254740991
),或小於的整數。
Warning
bigInt
類型與number
類型不兼容,不能直接計算。
const bigInt = BigInt(1234567890123456789012345678901234567890);
字串#
String 類型必須被括在引號裡。
let str = "Hello"; // 雙引號
let str2 = 'Single quotes are ok too'; // 單引號
let phrase = `can embed another ${str}`; // 反引號
布林值#
只有兩個值:true
和false
空值#
表示無,空,未知。
未定義#
表示未被賦值。
var str;
console.log(str) // undefined
符號#
表示唯一的標識符。
let user = {
name: "zhang"
};
var id = Symbol('id');
user[id] = 1
console.log(user, user[id], user.id)
隱藏屬性#
全局 Symbol.for#
通過相同的description
獲取相同的symbol
。
let id = Symbol.for("id"); // 如果該 symbol 不存在,則創建它
let idAgain = Symbol.for("id");
console.log( id === idAgain );
Symbol.keyFor#
和Symbol.for
相反,通過symbol
獲取description
。
Warning
Symbol.keyFor
只針對Symbol.for
創建的symbol
有效。
let id = Symbol.for('id')
let name = Symbol('id')
console.log(Symbol.keyFor(id),Symbol.keyFor(name))
- Symbol.hasInstance :當其他對象使用 instanceof 判斷是否為該對象的實例時會調用。
- Symbol.isConcatSpeardable:使用 cancat () 是否展開。
- Symbol.species:可以手動設置衍生對象的構造函數。
- Symbol.match:調用 match () 時。
- Symbol.search:調用 search () 時。
- Symbol.replace:調用 replace () 時.
- Symbol.split:調用 split () 時。
- Symbol.iterator:調用遍歷器方法。
- Symbol.toPrimitive:對象轉換為原始類型時調用。
- Symbol.toStringTag :調用 toString () 時可自定義
- Symbol.unscopables :被 with 排除的屬性。
Object 類型#
儲存數據集合和更複雜的實體。
6 種類型判斷方法#
typeof#
只能識別原始類型和引用類型。typeof x
和 typeof(x)
相同,這裡的括號不是typeof
的一部分。它是數學運算分組的括號。
Note
JavaScript 編程語言的設計錯誤,JavaScript 在儲存數據的時候會轉換成 32 位儲存,null 的標籤類型和 object 一樣都是 000 鏈接。
console.log(typeof 1)
console.log(typeof '1')
console.log(typeof undefined)
console.log(typeof true)
console.log(typeof Symbol())
console.log(typeof null)
console.log(typeof [])
console.log(typeof {})
console.log(typeof console)
console.log(typeof console.log)
constructor#
指向當前實例的構造函數。
let str = 'Covid-19'
console.log(str.constructor)
let number = 123
console.log(number.constructor)
let arr = [1,2,3]
console.log(arr.constructor)
let fun = function(){}
console.log(fun.constructor)
let obj = {}
console.log(obj.constructor)
instanceof#
在原型鏈上查找其是否為構造函數實例。
Warning
原始類型類型在 JavaScript 中是沒有原型鏈的。所以 instanceof 操作符對原始類型來說只會返回 false。
let arr = [1,2,3]
console.log(arr instanceof Array)
let fun = function(){}
console.log(fun instanceof Function)
let obj = {}
console.log(obj instanceof Object)
let number = 123;
console.log(number instanceof Number);
let string = '123'
console.log(number instanceof String);
let boolean = true
console.log(number instanceof Boolean);
Object.prototype.toString#
可以很好的判斷數據類型,封裝成方法即可。
console.log(Object.prototype.toString({}))
console.log(Object.prototype.toString.call({}))
console.log(Object.prototype.toString.call(1))
console.log(Object.prototype.toString.call('1'))
console.log(Object.prototype.toString.call(true))
console.log(Object.prototype.toString.call(function(){}))
console.log(Object.prototype.toString.call(null))
console.log(Object.prototype.toString.call(undefined))
console.log(Object.prototype.toString.call(/123/g))
console.log(Object.prototype.toString.call(new Date()))
console.log(Object.prototype.toString.call([]))
鴨子類型檢測#
通過檢查自身特定屬性來判斷
let str = 'Covid-19'
console.log(str.toLowerCase())
let arr = [1,2,3]
console.log(arr.join(','))
等比較#
console.log(null === null)
console.log(undefined === void 0)