聲明(Declarations)
undefined值在布爾類型環境中會被當作false。
數值類型環境中undefined值會被轉換為NaN。
對一個空變量求值時,空值 null 在數值類型環境中會被當作0來對待,而布爾類型環境中會被當作false
JavaScript 變量感覺上是被“提升”或移到了所有函數和語句之前。提升后的變量將返回 undefined 值,所以即使在使用或引用某個變量之后存在聲明和初始化操作,這個被提升的引用仍將得到 undefined 值。
由于存在變量聲明提升,一個函數中所有的var語句應盡可能地放在接近函數頂部的地方。這大大地提升了程序代碼的清晰度。
(在 ECMAScript 2015 中,let(const)將不會提升變量到代碼塊的頂部。因此,在變量聲明之前引用這個變量,將拋出錯誤ReferenceError。這個變量將從代碼塊一開始就處在一個“暫時性死區”,直到這個變量被聲明為止。)
對于函數,只有函數聲明會被提升到頂部,不包括函數表達式。
/* 函數聲明 */foo(); // "bar" function foo() { console.log("bar");} /* 函數表達式 表達式定義的函數,成為匿名函數。匿名函數沒有函數提升。*/ baz(); // TypeError: baz is not a function//此時的"baz"相當于一個聲明的變量,類型為undefined。由于baz只是相當于一個變量,因此瀏覽器認為"baz()"不是一個函數。var baz = function() { console.log("bar2");};全局對象是 window,你可以通過指定 window 或 frame 的名字,從一個 window 或 frame 訪問另一個 window 或 frame 中聲明的變量。例如,設想一個叫 phoneNumber 的變量在文檔里被聲明,你可以在子框架里用 parent.phoneNumber 來引用它。
常量(Constants)
在同一作用域中,不能用與變量或函數同樣的名字來命名常量。然而,對象屬性是不受保護的,所以下面的語句執行沒有問題。
const MY_OBJECT = {"key": "value"};MY_OBJECT.key = "otherValue";數據結構和類型
六種是 原型 的數據類型 以及 Object 對象
Objects 和 functions 是本語言的其他兩個基本要素。你可以將對象視為存放值的命名容器,而將函數視為你的應用程序能夠執行的過程(procedures)。
在涉及加法運算符(+)的數字和字符串表達式中,JavaScript 會把數字值轉換為字符串。
x = "The answer is " + 42 // "The answer is 42"y = 42 + " is the answer" // "42 is the answer"
新聞熱點
疑難解答
圖片精選