数字#
数値は整数と浮動小数点数に分けられ、10 進数、8 進数、16 進数、科学的表記法を使用して表されます。
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);
文字列#
文字列型は引用符で囲む必要があります。
let str = "Hello"; // ダブルクォート
let str2 = 'Single quotes are ok too'; // シングルクォート
let phrase = `can embed another ${str}`; // バッククォート
ブール値#
true
とfalse
の 2 つの値しかありません。
Null#
無を表します。
未定義#
値が割り当てられていないことを表します。
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"); // もしシンボルが存在しない場合は作成する
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 :他のオブジェクトがそのオブジェクトのインスタンスかどうかを判断する際に呼び出されます。
- Symbol.isConcatSpeardable:concat () を使用して展開するかどうかを判断します。
- Symbol.species:派生オブジェクトのコンストラクタを手動で設定できます。
- Symbol.match:match () が呼び出されたときに呼び出されます。
- Symbol.search:search () が呼び出されたときに呼び出されます。
- Symbol.replace:replace () が呼び出されたときに呼び出されます。
- Symbol.split:split () が呼び出されたときに呼び出されます。
- Symbol.iterator:イテレータメソッドが呼び出されたときに呼び出されます。
- Symbol.toPrimitive:オブジェクトをプリミティブ型に変換する際に呼び出されます。
- Symbol.toStringTag :toString () が呼び出されたときにカスタマイズできます。
- Symbol.unscopables :with 文で除外されるプロパティです。
オブジェクト型#
データのコレクションやより複雑なエンティティを格納します。
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)