【JavaScript 教程】第二章基礎(chǔ)知識03—JavaScript 數(shù)據(jù)類型

英文 | https://www.javascripttutorial.net/
譯文 | 楊小愛
在上節(jié)中,我們學(xué)習(xí)了JavaScript的變量,錯過的小伙伴可以點擊文章《【JavaScript 教程】第二章基礎(chǔ)知識02—JavaScript 變量》進(jìn)行學(xué)習(xí)。
那么,在今天的內(nèi)容中,我們將一起來學(xué)習(xí)JavaScript 數(shù)據(jù)類型及其獨特的特性。
JavaScript 有六種原始數(shù)據(jù)類型:
null
undefined
boolean
number
string
symbol (僅適用于 ES6)
let counter = 120; // counter is a numbercounter = false; // counter is now a booleancounter = "foo"; // counter is now a string
要獲取變量值的當(dāng)前類型,請使用 typeof 運算符:
let counter = 120; // counter is a numberconsole.log(typeof(counter)); // "number"counter = false; // counter is now a booleanconsole.log(typeof(counter)); // "boolean"counter = "Hi"; // counter is now a stringconsole.log(typeof(counter)); // "string"
輸出:
"number""boolean""string"
1、Undefined類型
未定義類型是一種具有未定義值的原始類型。
默認(rèn)情況下,當(dāng)一個變量被聲明但未初始化時,它會被賦值為 undefined。
考慮以下示例:
let counter;console.log(counter); // undefinedconsole.log(typeof counter); // undefined
在這個例子中,counter是一個變量。由于counter尚未初始化,因此它被分配了undefined的值。counter的類型也是未定義的。
需要注意的是,當(dāng)你在一個尚未聲明的變量上調(diào)用 typeof 運算符時,它也會返回 undefined ,這一點很重要:
console.log(typeof undeclaredVar); // undefined
2、Null類型
null 類型是第二種基本數(shù)據(jù)類型,它也只有一個值:null。
Javascript 定義 null 是一個空對象指針。請參閱以下示例:
let obj = null;console.log(typeof obj); // object
將稍后保存對象的變量分配給 null 是一個好習(xí)慣,以便你可以使用 if 語句檢查對象是否為 null,如下所示:
if(obj != null) {// call method of the object}
JavaScript 定義 null 等于 undefined,如下面的語句所示。
console.log(null == undefined); // true
3、Number類型
JavaScript 使用 IEEE-754 格式來表示整數(shù)和浮點數(shù)。
整數(shù)
以下語句聲明了一個保存整數(shù)的變量。
let num = 100;
如果要表示八進(jìn)制(基數(shù)為 8)文字,請將第一個數(shù)字設(shè)為零 (0),后跟八進(jìn)制數(shù)字(0 到 7),如下所示:
let oct = 060; // octal for 48
如果八進(jìn)制數(shù)的字面量超出范圍,JavaScript 會將其視為十進(jìn)制數(shù),如下例所示。
let d = 090; // intepreted as 90
為避免混淆,ES6 允許您使用前綴 0o后跟從 0 到 7 的八進(jìn)制數(shù)字序列來指定八進(jìn)制文字:
let v = 0o45;console.log(v); // 37
要創(chuàng)建十六進(jìn)制(基數(shù)為 16)文字,您使用 0x(小寫)作為前兩個字符,后跟任意數(shù)量的十六進(jìn)制數(shù)字(0 到 9,以及 A 到 F)。
let h = 0xf; // same as 0xF hexadecimal for 15
let f1 = 12.5;let f2 = .3; // same as 0.3, also valid but not recommended
let f3 = 200.00; // interpreted as integer 200
JavaScript 允許您使用 e-notation 來表示非常大或非常小的數(shù)字,如下例所示。
let f4 = 2.17e6; // ~ 2170000
JavaScript 提供了可以使用Number.MIN_VALUE和訪問的數(shù)字的最小值和最大值Number.MAX_VALUE。
此外,JavaScript 使用Infinity和-Infinity來表示有限的數(shù)字,包括正數(shù)和負(fù)數(shù)。
請參閱以下示例:
console.log(Number.MAX_VALUE); // 1.7976931348623157e+308console.log(Number.MIN_VALUE); // 5e-324console.log(Number.MAX_VALUE + Number.MAX_VALUE); // Infinityconsole.log(-Number.MAX_VALUE - Number.MAX_VALUE); // -Infinity
NaN
JavaScript 有一個特殊的數(shù)值叫做 NaN,它代表 Not a Number。事實上,它意味著一個無效的數(shù)字。
例如,字符串除以數(shù)字返回 NaN,如下例所示。
console.log('a'/2); // NaN;
在NaN有兩個特點:
任何帶有 NaN 的操作都會返回 NaN。
NaN 不等于任何值,包括其自身。
這里有些例子:
console.log(NaN/2); // NaNconsole.log(NaN == NaN); // false
4、String類型
在 JavaScript 中,字符串是零個或多個字符的序列。文字字符串以單引號 (‘) 或雙引號 (“) 開頭和結(jié)尾。
以雙引號開頭的字符串必須以雙引號結(jié)尾,以單引號開頭的字符串必須以單引號結(jié)尾。
這里有些例子:
let greeting = 'Hi';let s = "It's a valid string";let str = 'I\'m also a string'; // use \ to escape the single quote (')
let str = 'JavaScript';str = str + ' String';
let inProgress = true;let completed = false;console.log(typeof completed); // boolean
JavaScript 允許將其他類型的值轉(zhuǎn)換為 true 或 false 的布爾值。
要將另一種數(shù)據(jù)類型的值轉(zhuǎn)換為布爾值,請使用布爾函數(shù)。下表顯示了轉(zhuǎn)換規(guī)則:

請參閱以下演示:
console.log(Boolean('Hi'));// trueconsole.log(Boolean('')); // falseconsole.log(Boolean(20)); // trueconsole.log(Boolean(Infinity)); // trueconsole.log(Boolean(0)); // falseconsole.log(Boolean({foo: 100})); // true on non-empty objectconsole.log(Boolean(null));// false
6、Symbol類型
JavaScript 在 ES6 中添加了一個原始類型:symbol。與其他原始類型不同,該symbol類型沒有文字形式。
要創(chuàng)建符號,請按如下方式調(diào)用Symbol函數(shù):
let s1 = Symbol();
請注意,Symbol 是一個函數(shù),而不是一個對象構(gòu)造函數(shù),因此,您不能使用 new 運算符。如果你這樣做,你會得到一個 TypeError。
每次調(diào)用 Symbol 函數(shù)時,它都會創(chuàng)建一個新的唯一值。
console.log(Symbol() == Symbol()); // false
您可以將描述性字符串傳遞到 Symbol 函數(shù)中以進(jìn)行記錄和調(diào)試。
let s2 = Symbol('event.save');
當(dāng)您對Symbol變量調(diào)用 toString() 方法時,它會返回一個更具描述性的名稱,如下所示:
console.log(s2.toString()); // Symbol(event.save)
您可以將Symbol用于多種用途。其中之一是創(chuàng)建一個不能與任何其他值發(fā)生沖突的類似字符串的常量。
下面的示例創(chuàng)建一個表示click事件的Symbol。
const click = Symbol('click');
字符串 'click' 可能用于不同的目的而不是唯一的。但是,click symbol 絕對是獨一無二的。
7、Object類型
在 JavaScript 中,對象是屬性的集合,其中每個屬性都定義為一個鍵值對。
以下示例使用對象字面量形式定義了一個空對象:
let emptyObject = {};
以下示例定義了具有兩個屬性的 person 對象:
let person = {firstName: 'John',lastName: 'Doe'};
對象的屬性名稱可以是任何字符串。如果它不是有效的 JavaScript 標(biāo)識符,您可以在屬性名稱周圍使用引號。
例如,如果您有一個屬性 first-name,則必須使用諸如“first-name”之類的引號,但 firstName 是有效的 JavaScript 標(biāo)識符,因此引號是可選的。
如果您有多個屬性,請使用逗號 (,) 來分隔這些對。
JavaScript 允許您嵌套對象,如下例所示:
let contact = {firstName: 'John',lastName: 'Doe',email: '[email protected]',phone: '(408)-555-9999',address: {building: '4000',street: 'North 1st street',city: 'San Jose',state: 'CA',country: 'USA'}}
console.log(contact.firstName);console.log(contact.lastName);
要獲取嵌套對象的屬性,請使用以下形式:
console.log(contact.address.country);
如果你引用一個不存在的屬性,你會得到一個 undefined 值,如下所示:
console.log(contact.age); // undefined
以下示例使用類似數(shù)組的表示法來訪問聯(lián)系人對象的電子郵件和電話屬性。
console.log(contact['phone']); // '(408)-555-9999'console.log(contact['email']); // '[email protected]'
除了對象字面量形式,您還可以使用 new 關(guān)鍵字創(chuàng)建一個新對象,如下所示:
let customer = new Object();
并為對象的屬性賦值:
customer.name = 'ABC Inc.';
在 JavaScript 中,所有對象都派生自 Object 類型。我們將在后面教程中更多地討論 Object 類型。
總結(jié)
JavaScript 有六種基本類型:Number、String、Boolean、Null、Undefined和Symbol。
它還有一個復(fù)雜的類型,稱為Object。
學(xué)習(xí)更多技能
請點擊下方公眾號
![]()

