jinzhe

jinzhe

github
email

javascript類型

数字#

数值分為整數和浮點數,可使用十進制,八進制,十六進制和科學計數法來表示。

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類型無法安全地表示大於 25312^{53}-1(即9007199254740991),或小於2531-2^{53}-1的整數。

Warning

bigInt類型與number類型不兼容,不能直接計算。

const bigInt = BigInt(1234567890123456789012345678901234567890);

字串#

String 類型必須被括在引號裡。

let str = "Hello";  // 雙引號
let str2 = 'Single quotes are ok too';  // 單引號
let phrase = `can embed another ${str}`;  // 反引號

布林值#

只有兩個值:truefalse

空值#

表示無,空,未知。

未定義#

表示未被賦值。

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 xtypeof(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)
載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。