JavaScript基本概念整理(語句、變量、變量提升、數(shù)據(jù)類型、typeof)

語句

JavaScript 程序的執(zhí)行單位為行(line),也就是一行一行地執(zhí)行。

變量

變量是對“值”的具名引用。變量就是為“值”起名,然后引用這個名字,就等同于引用這個值。變量的名字就是變量名。

如果只是聲明變量而沒有賦值,則該變量的值是undefined。undefined是一個特殊的值,表示“無定義”。

JavaScript 是一種動態(tài)類型語言,也就是說,變量的類型沒有限制,變量可以隨時更改類型。

var a = 1;
a = 'hello';

如果使用var重新聲明一個已經(jīng)存在的變量,是無效的。

var x = 1;
var x;
x // 1

上面代碼中,變量x聲明了兩次,第二次聲明是無效的。

但是,如果第二次聲明的時候還進行了賦值,則會覆蓋掉前面的值。

var x = 1;
var x = 2;

// 等同于

var x = 1;
var x;
x = 2;

變量提升

JavaScript 引擎的工作方式是,先解析代碼,獲取所有被聲明的變量,然后再一行一行地運行。這造成的結(jié)果,就是所有的變量的聲明語句,都會被提升到代碼的頭部,這就叫做變量提升(hoisting)。

數(shù)據(jù)類型

JavaScript 語言的每一個值,都屬于某一種數(shù)據(jù)類型。JavaScript 的數(shù)據(jù)類型,共有六種。(ES6 又新增了第七種 Symbol 類型的值。)

  • 數(shù)值(number):整數(shù)和小數(shù)(比如13.14
  • 字符串(string):文本(比如Hello World)。
  • 布爾值(boolean):表示真?zhèn)蔚膬蓚€特殊值,即true(真)和false(假)
  • undefined:表示“未定義”或不存在,即由于目前沒有定義,所以此處暫時沒有任何值
  • null:表示空值,即此處的值為空。
  • 對象(object):各種值組成的集合。

數(shù)值、字符串、布爾值這三種類型,合稱為原始類型(primitive type)的值,即它們是最基本的數(shù)據(jù)類型,不能再細(xì)分了。

對象則稱為合成類型(complex type)的值,因為一個對象往往是多個原始類型的值的合成,可以看作是一個存放各種值的容器。

至于undefinednull,一般將它們看成兩個特殊值。

對象是最復(fù)雜的數(shù)據(jù)類型,又可以分成三個子類型。

  • 狹義的對象(object)
  • 數(shù)組(array)
  • 函數(shù)(function)

typeof 運算符

JavaScript 有三種方法,可以確定一個值到底是什么類型。

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

typeof運算符可以返回一個值的數(shù)據(jù)類型。

數(shù)值、字符串、布爾值分別返回number、string、boolean。

typeof 123 // "number"
typeof '123' // "string"
typeof false // "boolean"

函數(shù)返回function。

function f() {}
typeof f
// "function"

undefined返回undefined。

typeof undefined
// "undefined"

利用這一點,typeof可以用來檢查一個沒有聲明的變量,而不報錯。

v
// ReferenceError: v is not defined

typeof v
// "undefined"

上面代碼中,變量v沒有用var命令聲明,直接使用就會報錯。但是,放在typeof后面,就不報錯了,而是返回undefined。

實際編程中,這個特點通常用在判斷語句。

// 錯誤的寫法
if (v) {
  // ...
}
// ReferenceError: v is not defined

// 正確的寫法
if (typeof v === "undefined") {
  // ...
}

對象返回object。

typeof window // "object"
typeof {} // "object"
typeof [] // "object"

上面代碼中,空數(shù)組([])的類型也是object,這表示在 JavaScript 內(nèi)部,數(shù)組本質(zhì)上只是一種特殊的對象。這里順便提一下,instanceof運算符可以區(qū)分?jǐn)?shù)組和對象。

var o = {};
var a = [];

o instanceof Array // false
a instanceof Array // true

null返回object。

typeof null // "object"

null的類型是object,這是由于歷史原因造成的。1995年的 JavaScript 語言第一版,只設(shè)計了五種數(shù)據(jù)類型(對象、整數(shù)、浮點數(shù)、字符串和布爾值),沒考慮null,只把它當(dāng)作object的一種特殊值。后來null獨立出來,作為一種單獨的數(shù)據(jù)類型,為了兼容以前的代碼,typeof null返回object就沒法改變了。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容