JavaScript快速入門-03-數據類型

3 數據類型

3.1 簡介

    JavaScript中的每個值都是屬於一種特定的數據類型。JavaScript中一共有以下幾種數據類型,詳細如下所示:

  • 原始類型:UndefinedNullBooleanNumberStringSymbol
  • 對象:Object

通常將數值、字符串和布爾值三種類型,稱之爲基本的數據類型,對象類型稱之爲合成類型(因爲一個對象往往是多個基本類型值的合成,可以看作是一個存放各種值的容器),而Undefined和Null一般看作是兩個特殊值。

3.2 typeof 運算符

    因爲JavaScript的類型系統是鬆散的,所以需要一種手段來確定任意變量的數據類型,這時可以使用typeof,對一個值使用typeof操作符可以返回以下值

  • undefined 表示值未定義
  • boolean 表示值爲布爾值
  • string 表示值爲字符串
  • number 表示值爲數值
  • object 表示值爲對象(不是函數)或null
  • function 表示值爲函數
  • symbol 表示值爲符號

    JavaScript有三種方法,可以確定一個值是屬於什麼類型,如下所示:

  • typeof 運算符
  • instanceof 運算符
  • Object.prototype.toString 方法

  這裏先介紹常用的typeof方法,示例如下所示:

> typeof 123
"number"
> typeof true
"boolean"
> typeof "1234"
"string"
> typeof function f(){}
"function"
> typeof undefined
"undefined"
> typeof null
"object"
> typeof {}
"object"
> typeof []
"object"

基於typeof這個特性,我們可以用來檢查一個沒有聲明的變量而不報錯。如下所示:

> test
VM344:1 Uncaught ReferenceError: test is not defined
    at <anonymous>:1:1
(anonymous) @ VM344:1
> typeof test
"undefined"

在實際編程中,可以利用typeof這一點進行判斷,如下所示:

if (test){
  // do something
}

if (typeof test === "undefined"){
  // do something
}

3.3 數值類型

3.3.1 整數和浮點數

    在JavaScript中,所的數字都是64位浮點數形式進行存儲,即使整數也是如此。示例如下所示:

> 1.00000 === 1.0
true
> 1 === 1.0
true

JavaScript 語言的底層根本沒有整數,所有數字都是浮點類型。而在某些情況下,只有整數才能完成,此時JavaScript會自動把64位的浮點數轉換成32位整數,再進行運算,如位運算。

    由於浮點數不是精確的值,所以在涉及到小數的比較和運算是要特別小心。示例如下所示:

> 0.1+0.2 === 0.3
false
> 0.3/0.1
2.9999999999999996
> (0.5-0.3) === (0.3-0.1)
false

3.3.2 數值精度

    根據國際標準IEEE 754,JavaScript浮點數的64個二進制位,最左邊到右邊的表示方式如下所示:

  • 第1位:符號位,0表示正數,1表示負數
  • 第2~12位:指數部分,共11位
  • 第13~64位:小數部分,共52位

符號位決定一個數的正負,而指數決定了數值的大小,小數部分決定了數值的精度。

3.3.3 數值範圍

    根據標準,64位浮點數的指數部分長度是11個二進制位,則指數的範圍爲0~2047,分出一半負數,則JavaScript能夠表示的數值範圍爲2-1023 (開區間) - 21024,超出這個範圍則無法表示。

如果一個數大於等於 $ 2 ^{1024} $ ,那麼則會發生正向溢出,此時會返回Infinity

> Math.pow(2,1025)
Infinity

如果一個數小於 $ 2^{1024} $ ,則會發生負向溢出,此時會返回0

> Math.pow(2,-1080)
0

    實際的示例代碼如下所示:

var a=2;
for (var i=0;i<100;i++){
	a = a * a
  }
Infinity // 輸出結果
var b=0.2;
for (var i=0;i<100;i++){
 	b = b * b
  }
0  // 輸出結果

在JavaScript中提供獲取數值對象的最大和最小值屬性,可以返回表示的具體的最大值和最小值,如下所示:

> Number.MAX_VALUE
1.7976931348623157e+308
> Number.MIN_VALUE
5e-324

3.3.4 數值表示方法

    JavaScript中的數值有多種表示方法,可以用字面形式直接表示,如10(十進制)和0xA2(十六進制),數值也可以用科學計數方式表示,示例如下所示:

> 123e5
12300000
> 123e-2
1.23
> -4.5e5
-450000
> .02e5
2000
> 2e-2
0.02

在科學計數方式中,e可以大寫也可以小寫

    以JavaScript中,在以下兩種情況下,會自動將數值轉換爲科學計數方式表示,其他情況則採用字面形式直接表示

  • 1.小數點前的位數多於21位
> 123456789012345678901234567890
1.2345678901234568e+29
  • 2.小數點後的零多於5個
> 0.000000123
1.23e-7

3.3.5 數值的進制

    使用字面量直接表示一個數值時,JavaScript對整數提供4種進制的表示方法:二進制、八進制、十進制和十六進制。

  • 二進制:使用前綴0b或0B表示
  • 八進制:使用前緣0o或0O表示,或都僅有0,且只用了0~7的8個數字
  • 十進制:沒有前綴
  • 十六進制:使用前綴0x或0X表示

默認情況下,JavaScript內部會自動將二進制、八進制、十六進制轉換爲十進制,示例如下所示:

> 0b111
7
> 0o76
62
> 0xAF
175
> 098  // 注意與 8 進制的區別
98

3.3.6 特殊數值

3.3.6.1 正零和負零

    在JavaScript中,最左邊的一位表示符號位,則意味着任何一個數都對應着一個負值,而0也不例外。在JavaScript中,實際上存在2個0,一個是+0和一個-0。區別就是64位浮點數表示法的符號位不同,但卻是等價的。需要注意的事項如下所示

  • 大多數情況下,正零和負零都會被當作正常的0
  • 在+0和-0當作分母時,返回的值是不相等的

示例如下所示:

> 0 === +0
true
> 0 == -0
true
> -0 === +0
true
> (+0).toString()
"0"
> (-0).toString()
"0"
> (1/+0) === (1/-0) //(1/+0)=+Infinity, (1/-0)=-Infinity,所以導致兩者不相等
false

3.3.6.2 NaN

    NaN是JavaScript的特殊值,表示非數字(Not a number),一般常出現在將字符串解析成數字出錯的情況中或一些數學函數的運算結果中。示例如下所示:

> 1-"a"
NaN
> Math.log(-10)
NaN
> 0/0
NaN
  • NaN不是獨立的數據類型,而是一個特殊的數值,它的數據類型依然屬於Number,可以使用typeof運算符進行查看。
> typeof(NaN)
"number"
  • NaN不等於任何值,包括其本身
> NaN === NaN
false
  • NaN在布爾運算中被當作false
> Boolean(NaN)
false
  • NaN與任何數(含自身)之間進行運算,得到的都是NaN
> NaN + NaN
NaN
> NaN -32
NaN
> NaN *32
NaN
> NaN+32
NaN

3.3.6.3 Infinity

    Infinity表示無窮,用來表示兩種場景。一種是一個正的數值太大,或一個負的數值太小,無法表示;另一種是非0數值除以0,得到Infinity

> Math.pow(2,2048)
Infinity
> 28/0
Infinity

    nfinity有正負之分,Infinity表示正的無窮,-Infinity表示負的無窮。

> 1/-0
-Infinity
> -1/-0
Infinity

3.4 字符串類型

    String數據類型表示零或多個字符序列,字符串可以使用雙引號(")、單引號(')或反引號(`)表示。示例如下所示:

let firstName="Surpas";
let lastName='Lee';
let nickName=`Kevin`;

1.三種引號表示字符串沒有任何區別

2.以某種引號作爲字符串開頭,必須仍然以該種引號作爲字符串結尾

  • 1. 字符字面量

    字符串數據類型包含一些字符字面量,用於表示非打印字符或有其他用途的字符,如下所示:

字面量 含義
\n 換行符
\t 製表符
\b 退格
\ 反斜槓(\)
' 單引號(')
" 雙引號(")
` 反引號(`)
  • 2. 字符串的特點

    字符串是不可變的,意思是一旦創建,它們的值就不能變了。要修改某個變量中的字符串值,必須先銷燬原始的字符串,然後將包含新值的另一個字符串保存到該變量。

  • 3.轉換爲字符串

    有兩種方式可以把一個值轉換爲字符串。

  • 可以使用幾乎所有值都有的 toString() 方法,該方法可以返回當前值的字符串等價物。
let age=28
let ageStr=age.toString()
let flag=true
let flagStr=flag.toString()

console.log(typeof(age),typeof(ageStr),typeof(flag),typeof(flagStr)) // number string boolean string

toString()方法可見於數值、布爾值、對象和字符串值。null 和undefined 值沒有toString()方法

    多數情況下,toString()不接收任何參數。不過在對數值調用該方法時,toString()可以接收一個底數參數,即以底數形式輸出數值的字符串表示。默認情況下,toString()返回數值的十進制字符串表示。而通過傳入參數,可以得到數值的二進制、八進制、十六進制,或者其他任何有效基數的字符串表示

let age=28
console.log(age.toString())    // "28"
console.log(age.toString(2))   // "11100"
console.log(age.toString(8))  // "34"
console.log(age.toString(10))  // "28"
console.log(age.toString(16))  // "1c"
  • 如果在不確定一個值是不是null或undefined,可以使用String()轉型函數,它始終會返回表示相應類型值的字符串。String()函數遵循如下規則
    • 如果值有toString()方法,則調用該方法(不傳參數)並返回結果。
    • 如果值是null,返回"null"。
    • 如果值是undefined,返回"undefined"
let age=28;
let flag=true;
let person=null;
let name=undefined;

console.log(typeof(String(age)),String(age)); // string "28"
console.log(typeof(String(flag)),String(flag)); // string "true"
console.log(typeof(String(person)),String(person)); // string "null"
console.log(typeof(String(name)),String(name)); // string "undefined"
  • 4.模板字面量

    ECMAScript 6 新增了使用模板字面量定義字符串的能力。與使用單引號或雙引號不同,模板字面量
保留換行字符,可以跨行定義字符串。

let mulStr01="Hello Surpass\n Welcome to Shanghai";
let mulStr02=`Hello Surpass
Welcome to Shanghai`;

console.log(mulStr01)
console.log(mulStr02)

    輸出結果如下所示:

mulStr01 is: Hello Surpass
 Welcome to Shanghai
mulStr02 is: Hello Surpass
Welcome to Shanghai

模板字面量在定義模板時特別有用,比如下面這個HTML模板:

let pageHTMLTemplate=`
<div>
  <a href="#"/>
    <span>Surpass</span>
</div>
`;

    由於模板字面量會保持反引號內部的空格,因此在使用時要格外注意。示例如下所示:

let tempStr01=`Hello Surpass
             Welcome to Shanghai`;
let tempStr02="Hello Surpass\nWelcome to Shanghai"

console.log("tempStr01 length is:",tempStr01.length)
console.log("tempStr01 content is:",tempStr01)
console.log("tempStr02 length is:",tempStr02.length)
console.log("tempStr02 content is:",tempStr02)

    輸出結果如下所示:

tempStr01 length is: 46
tempStr01 content is: Hello Surpass
             Welcome to Shanghai
tempStr02 length is: 33
tempStr02 content is: Hello Surpass
Welcome to Shanghai
  • 5.字符串插值

    模板字面量中最常用的一個特性是支持字符串插值,也就是可以在一個連續定義中插入一個或多個值。技術上講,模板字面量不是字符串,而是一種特殊的JavaScript句法表達式,只不過求值後得到的是字符串。

字符串插值通過在 ${} 中使用一個JavaScript表達式實現。

所有插入的值都會使用toString()強制轉型爲字符串,而且任何JavaScript表達式都可以用於插值

在插值表達式中可以調用函數和方法

模板也可以插入自己之前的值

let person="Surpass";
let age=28
// 以前最常用的字符串插值
let personInfoOld="Name is "+ person + " age is " + age;

// 現在可以採用的方式
let personInfoNew=`Name is ${person} age is ${age}`;

// 插值中調用函數和方法
function convertToUpper(word){
    return word.toUpperCase()
}

result=`${convertToUpper("surpass")}`

console.log("old output is: ",personInfoOld);
console.log("new output is: ",personInfoNew);
console.log("after word convert to upper is ",result)

let str="";
function append(){
    str=`${str}surpass`;
    console.log("str is: ",str);
}

for(let i=0;i<3;i++){
    append()
}

    輸出結果如下所示:

old output is:  Name is Surpass age is 28
new output is:  Name is Surpass age is 28
after word convert to upper is  SURPASS
str is:  surpass
str is:  surpasssurpass
str is:  surpasssurpasssurpass

3.5 布爾類型

    Boolean類型使用最多的類型之一,有兩個字面值:truefalse

  • 1.true和false不同於數值,因此true!=1,false!=0

  • 2.true和false是區分大小寫

  • 3.要將其他類型的值轉換爲布爾值,可以使用Boolean()函數

數據類型 轉換爲true值 轉換爲false值
Boolean true false
String 非空字符串 空字符串
Number 非零數值(包括無窮值) 0、NaN
Object 任意對象 null
Undefined N/A(不存在) undefined

    示例如下所示:

let str="Hello,Surpass";
if (str) {
    console.log("str value is true");
}
else{
    console.log("str value is false");
}

// 輸出結果
// str value is true

3.6 數組類型

    數組(array)是按順序排列的一組值。每個值的位置都有編號(從0開始),整個數組用方括號表示。

3.6.1 數組定義

  • 方法一:定義即賦值
var sampleArray=[1,2,3,4]
  • 方法二:先定義再賦值
var sampleArray=[];
sampleArray[0]=1;
sampleArray[1]=2;
sampleArray[2]=3;
sampleArray[3]=4;

    任何類型的數據都可以放入數組中,如下所示:

var sampleArray=[
    {"name":"Surpass"},
    28,
    function(){ return true;},
    ["a","b"]
];

3.6.2 數組本質

    本質上,數組屬於一種特殊的對象。typeof運算符會返回數組的類型是object,其特殊特性體現在,其鍵名是按順序排列的一個組整數,如下所示:

let sampleArray=["a","b","c","d"];
console.log("sampleArray type is:"+typeof(sampleArray)+" sampleArray key is:"+Object.keys(sampleArray))
// 輸出結果:sampleArray type is:object sampleArray key is:0,1,2,3

由於數組成員的鍵名是固定的(默認總是0、1、2...),因此數組不用爲每個元素指定鍵名。JavaScript規定,對象的鍵名一律爲字符串,所以,數組的鍵名其實也是字符串。之所以可以用數值讀取,是因爲非字符串的鍵名會被轉爲字符串。

let sampleArray=["a","b","c","d"];
console.log("sampleArray first element is:",sampleArray[0])
console.log("sampleArray first element is:",sampleArray["0"])
console.log("sampleArray second element is:",sampleArray[1.0000])

輸出結果如下所示:

sampleArray first element is: a
sampleArray first element is: a
sampleArray second element is: b

3.6.3 常用方法

3.6.3.1 length

    返回數組成員數量,示例如下所示:

let sampleArray=["a","b","c","d"];
console.log("sampleArray length is:",sampleArray.length)
console.log("temp array length is:",[1,2,3].length)

輸出結果如下所示:

sampleArray length is: 4
temp array length is: 3

    只要是數組,就一定有length屬性。該屬性是一個動態的值。length屬性是可寫的,其特性如下所示:

  • 如果人爲設置一個小於當前成員個數的值,該數組的成員數量會自動減少到length設置的值
  • 如果人爲設置length大於當前元素個數,則數組的成員數量會增加到這個值,新增的位置都是空位
  • 如果人爲設置length爲不合法的值,則會報錯
let sampleArray=["a","b","c","d"];
sampleArray.length=2;
console.log("reduce sampleArray length is:",sampleArray);
sampleArray.length=8;
console.log("add sampleArray length is:",sampleArray);
sampleArray.length="Surpass";

輸出結果如下所示:

reduce sampleArray length is: [ 'a', 'b' ]
add sampleArray length is: [ 'a', 'b', <6 empty items> ]
C:\Users\Surpass\Documents\VSCodeProjects\JavaScriptDemo\sample.js:144
sampleArray.length="Surpass"
                  ^

RangeError: Invalid array length
    at Object.<anonymous> (C:\Users\Surpass\Documents\VSCodeProjects\JavaScriptDemo\sample.js:144:19)
    at Module._compile (node:internal/modules/cjs/loader:1099:14)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1153:10)
    at Module.load (node:internal/modules/cjs/loader:975:32)
    at Function.Module._load (node:internal/modules/cjs/loader:822:12)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:77:12)
    at node:internal/main/run_main_module:17:47

Node.js v17.8.0

通過這個特性,可以利用length=0來達到清空數組

let sampleArray=["a","b","c","d"];
sampleArray.length=0;
console.log("sampleArray is:",sampleArray); // sampleArray is: []

3.6.3.2 遍歷數組

    數組遍歷的方法主要有以下幾種:

  • 1.for循環
let sampleArray=["a","b","c","d"];
for(let i=0;i<sampleArray.length;i++){
    console.log("sample element is:",sampleArray[i])
}
// 或
let sampleArray=["a","b","c","d"];
for(var i in sampleArray){
    console.log("sampleArray element is:",sampleArray[i])
}
  • 2.while 循環
let sampleArray=["a","b","c","d"];
let index=0;
while(index<sampleArray.length){
    console.log("sampleArray element is:",sampleArray[index]);
    index++
}
//或
let sampleArray=["a","b","c","d"];
let index=sampleArray.length;
while(index--){
    console.log("sampleArray element is:",sampleArray[index]);
}
  • 3.forEach循環
let sampleArray=["a","b","c","d"];
sampleArray.forEach(function (ele){
    console.log("sampleArray element is:",ele)
})

3.6.3.3 push/unshift

  • push:將新元素添加到數組的末尾,並返回新的長度。
  • unshift:方法將新項添加到數組的開頭,並返回新的長度。
let sampleArray=["a","b","c","d"];
let pushSampleArrayLength=sampleArray.push("tail");
console.log("push method:new sampleArray element is: "+sampleArray+" new sampleArray length is: "+pushSampleArrayLength);
let unshiftSampleArrayLength=sampleArray.unshift("head");
console.log("unshift method:new sampleArray element is: "+sampleArray+" new sampleArray length is: "+unshiftSampleArrayLength);

輸出結果如下所示:

push method:new sampleArray element is: a,b,c,d,tail new sampleArray length is: 5
unshift method:new sampleArray element is: head,a,b,c,d,tail new sampleArray length is: 6

3.6.3.4 pop/shift

  • pop:刪除數組的最後一個元素,並返回其刪除的值
  • shift:刪除數組中的第一個元素,並返回其刪除的值
let sampleArray=["a","b","c","d"];
let shiftElement=sampleArray.shift();
console.log("delete first element :"+shiftElement+" sampleArray is:"+sampleArray);
let popElement=sampleArray.pop();
console.log("delete last element is:"+popElement+" sampleArray is:"+sampleArray);

輸出結果如下所示:

delete first element :a sampleArray is:b,c,d
delete last element is:d sampleArray is:b,c

3.6.3.5 slice

    返回數組中被選中的元素

let sampleArray=["a","b","c","d"];
console.log("new samplArray is:",sampleArray.slice(1,3)); // new samplArray is: [ 'b', 'c' ]

3.7 對象類型

    對象類型簡單來說就是一組鍵值對(key-value)的集合,是一種無序的複合數據集合。

3.7.1 定義對象

  • 方法一:
let personInfo={
    name:"Surpass",
    age:28,
    location:"Shanghai"
};
// 或
let personInfo={
    "name":"Surpass",
    "age":28,
    "location":"Shanghai"
};
  • 方法二:
let personInfo={};
personInfo.name="Surpass";
personInfo.age=28;
personInfo.location="Shanghai"

3.7.2 常用方法

3.7.2.1 鍵值讀取/賦值

  • 1.讀取鍵,示例代碼如下所示:
let personInfo={
    "name":"Surpass",
    "age":28,
    "location":"Shanghai"
};

console.log("person info is:",Object.keys(personInfo))
// person info is: [ 'name', 'age', 'location' ]
  • 2.值讀取和賦值都可以使用以下兩種方法
  • 使用點運算符
  • 使用[]運算符
let personInfo={
    "name":"Surpass",
    "age":28,
    "location":"Shanghai"
};
// 方法一:讀值
console.log("person name is:",personInfo.name); // person name is: Surpass
// 方法二:讀值
console.log("person age is:",personInfo["age"]); // person age is: 28
// 方法一:賦值
personInfo.name="Kevin";
// 方法二:賦值
personInfo["location"]="Wuhan";
console.log("person info is:",personInfo) //person info is: { name: 'Kevin', age: 28, location: 'Wuhan' }

3.7.2.2 鍵值刪除/增加

  • 增加:可使用點運算符或[]增加即可
  • 刪除:使用delete
let personInfo={
    "name":"Surpass",
    "age":28,
    "location":"Shanghai"
};
personInfo.from="Wuhan";
personInfo["to"]="Nanjing"
console.log("person info is:",personInfo); // person info is: {name: 'Surpass', age: 28, location: 'Shanghai', from: 'Wuhan', to: 'Nanjing'}
delete personInfo.to;
console.log("person info is:",personInfo); // person info is: {name: 'Surpass', age: 28, location: 'Shanghai', from: 'Wuhan'}

3.7.2.3 in

    in 用於檢查鍵是否存在於某一對象中

let personInfo={
    "name":"Surpass",
    "age":28,
    "location":"Shanghai"
};
let nameExist="name" in personInfo;
let fromExist="from" in personInfo;
let toStringExist="toString" in personInfo;
console.log("person info is:",nameExist);  // true
console.log("person info is:",fromExist);  // false
console.log("person info is:",toStringExist); // true

in運算符存在一個問題,其不能識別哪些屬性是對象自身的,哪些屬性是繼承的。就像上面代碼中,對象personInfo本身並沒有toString屬性,但是in運算符會返回true,因爲這個屬性是繼承的。針對這種情況,可以使用對象的hasOwnProperty方法判斷一下,是否爲對象自身的屬性。

let personInfo={
    "name":"Surpass",
    "age":28,
    "location":"Shanghai"
};
var property="toString"
if (property in personInfo){
    if (personInfo.hasOwnProperty(property)){
        console.log("toString is personInfo owner property");
    }
    else{
        console.log("toString is not personInfo owner property");
    }
}
// toString is not personInfo owner property

3.7.2.4 遍歷

    遍歷對象,一般常用for ... in,如下所示:

let personInfo={
    "name":"Surpass",
    "age":28,
    "location":"Shanghai"
};
for(var item in personInfo){
    console.log("key is:"+item+" value is:"+personInfo[item])
}

輸出結果如下所示:

key is:name value is:Surpass
key is:age value is:28
key is:location value is:Shanghai

3.7.2.5 with語句

    with作用是操作同一個對象的多個屬性,提供一些書寫的方便。其基本語法格式如下所示:

with(對象){
 語句;
}

    示例代碼如下所示:

let personInfo={
    "name":"Surpass",
    "age":28,
    "location":"Shanghai"
};

with(personInfo){
   name="Kevin";
   location="Wuhan"
}

console.log("personInfo is",personInfo) // personInfo is { name: 'Kevin', age: 28, location: 'Wuhan' }

    以上代碼等同於以下代碼:

let personInfo={
    "name":"Surpass",
    "age":28,
    "location":"Shanghai"
};

personInfo.name="Kevin";
personInfo.location="Wuhan";
console.log("personInfo is",personInfo); // personInfo is { name: 'Kevin', age: 28, location: 'Wuhan' }

注意事項:with區塊內的賦值操作,必須是當前對象已經存在的屬性,否則會創造一個當前作用域的全局變量

let personInfo={
    "name":"Surpass",
    "age":28,
    "location":"Shanghai"
};

with (personInfo){
    name="Kevin";
    from="Wuhan";
    to="Nanjing";
}
console.log("personInfo is",personInfo); // personInfo is { name: 'Kevin', age: 28, location: 'Shanghai' }
console.log("from value is:",from,"to value is:",to); // from value is: Wuhan to value is: Nanjing

3.8 Undefined 類型

    Undefined類型只有一個值,特殊值undefined。當使用var或let聲明瞭變量但沒有初始化時,就相當於給變量賦予了undefined值:

var age;
console.log(age==undefined) // true

在對未初始化的變量調用typeof時,返回的結果是undefined,但對未聲明的變量調用它時,返回的結果還是undefined

undefined是一個假值

3.9 Null類型

    Null類型同樣只有一個值,特殊值null。邏輯上講,null值表示一個空對象指針,這也是給typeof null會返回object的原因。

    在定義將來要保存對象值的變量時,建議使用null來初始化,不要使用其他值。這樣,只要檢查這個變量的值是不是null就可以知道這個變量是否在後來被重新賦予了一個對象的引用,示例如下所示:

let person=null
if (person != null) {
    console.log("person 已經申明");
}
else{
    console.log("person 未申明");
}

null是一個假值

原文地址:https://www.jianshu.com/p/c9061b035596

本文同步在微信訂閱號上發佈,如各位小夥伴們喜歡我的文章,也可以關注我的微信訂閱號:woaitest,或掃描下面的二維碼添加關注:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章