JavaScript 變量提升

JavaScript 中,函數(shù)及變量的聲明都將被提升到函數(shù)的最頂部。
JavaScript 中,變量可以在使用后聲明,也就是變量可以先使用再聲明。
變量提升:函數(shù)聲明和變量聲明總是會被解釋器悄悄地被"提升"到方法體的最頂部。

JavaScript 初始化不會提升

JavaScript 只有聲明的變量會提升,初始化的不會

在頭部聲明你的變量

對于大多數(shù)程序員來說并不知道 JavaScript 變量提升。
如果程序員不能很好的理解變量提升,他們寫的程序就容易出現(xiàn)一些問題。
為了避免這些問題,通常我們在每個作用域開始前聲明這些變量,這也是正常的 JavaScript 解析步驟,易于我們理解。

JavaScript 嚴(yán)格模式(use strict)

JavaScript 嚴(yán)格模式(strict mode)即在嚴(yán)格的條件下運行。

使用 "use strict" 指令

"use strict" 指令在 JavaScript 1.8.5 (ECMAScript5) 中新增。
它不是一條語句,但是是一個字面量表達(dá)式,在 JavaScript 舊版本中會被忽略。
"use strict" 的目的是指定代碼在嚴(yán)格條件下執(zhí)行。
嚴(yán)格模式下你不能使用未聲明的變量。
1.嚴(yán)格模式聲明
嚴(yán)格模式通過在腳本或函數(shù)的頭部添加 "use strict"; 表達(dá)式來聲明。
變量名不能使用 "eval" 字符串:
變量名不能使用 "arguments" 字符串:


image.png

賦值運算符應(yīng)用錯誤

在 JavaScript 程序中如果你在 if 條件語句中使用賦值運算符的等號 (=) 將會產(chǎn)生一個錯誤結(jié)果, 正確的方法是使用比較運算符的兩個等號 (==)。

比較運算符常見錯誤

在常規(guī)的比較中,數(shù)據(jù)類型是被忽略的

加法與連接注意事項

加法是兩個數(shù)字相加。
連接是兩個字符串連接。
JavaScript 的加法和連接都使用 + 運算符。

浮點型數(shù)據(jù)使用注意事項

JavaScript 中的所有數(shù)據(jù)都是以 64 位浮點型數(shù)據(jù)(float) 來存儲。
所有的編程語言,包括 JavaScript,對浮點型數(shù)據(jù)的精確度都很難確定

<script>
var x = 0.1;
var y = 0.2;
var z = x + y;
document.getElementById("demo").innerHTML = z;
</script> ```
結(jié)果:![image.png](http://upload-images.jianshu.io/upload_images/9137754-188cf59a95b03b5f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
為解決以上問題,可以用整數(shù)的乘除法來解決:
實例
var z = (x * 10 + y * 10) / 10;       // z 的結(jié)果為 0.3
## JavaScript 字符串分行
JavaScript 允許我們在字符串中使用斷行語句:
### 實例 1
var x =
"Hello World!";
但是,在字符串中直接使用回車換行是會報錯的:
### 實例 2
var x = "Hello
World!";
**字符串?dāng)嘈行枰褂梅葱备?\)**,如下所示:
實例 3
var x = "Hello \
World!";
1.錯誤的使用分號
以下實例中,if 語句失去方法體,原 if 語句的方法體作為獨立的代碼塊被執(zhí)行,導(dǎo)致錯誤的輸出結(jié)果。
由于分號使用錯誤,if 語句中的代碼塊就一定會執(zhí)行:
if (x == 19);
{
    // code block  
}
2.Return 語句使用注意事項
JavaScript 默認(rèn)是在代碼的最后一行自動結(jié)束。
以下兩個實例返回結(jié)果是一樣的(一個有分號一個沒有)
實例 1
function myFunction(a) {
    var power = 10  
    return a * power
}
實例 2
function myFunction(a) {
    var power = 10;
    return a * power;
}
**不用對 return 語句進(jìn)行斷行。**
JavaScript 不支持使用名字來索引數(shù)組,只允許使用數(shù)字索引。
在 JavaScript 中, 對象 使用 名字作為索引。
如果你使用名字作為索引,當(dāng)訪問數(shù)組時,JavaScript 會把數(shù)組重新定義為標(biāo)準(zhǔn)對象。
執(zhí)行這樣操作后,數(shù)組的方法及屬性將不能再使用,否則會產(chǎn)生錯誤:

定義數(shù)組元素,最后不能添加逗號

定義對象,最后不能添加逗號
Undefined 不是 Null
在 JavaScript 中, null 用于對象, undefined 用于變量,屬性和方法。
對象只有被定義才有可能為 null,否則為 undefined。
如果我們想測試對象是否存在,在對象還沒定義時將會拋出一個錯誤。
錯誤的使用方式:
if (myObj !== null && typeof myObj !== "undefined") 
正確的方式是我們需要先使用 typeof 來檢測對象是否已定義:
if (typeof myObj !== "undefined" && myObj !== null) 
程序塊作用域
在每個代碼塊中 JavaScript 不會創(chuàng)建一個新的作用域,一般各個代碼塊的作用域都是全局的。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 第2章 基本語法 2.1 概述 基本句法和變量 語句 JavaScript程序的執(zhí)行單位為行(line),也就是一...
    悟名先生閱讀 4,207評論 0 13
  • FreeCodeCamp - Basic JavaScript 寫在前面: 我曾經(jīng)在進(jìn)谷前刷過這一套題,不過當(dāng)時只...
    付林恒閱讀 16,532評論 5 28
  • JavaScript 中,函數(shù)及變量的聲明都將被提升到函數(shù)的最頂部。JavaScript 中,變量可以在使用后聲明...
    sponing閱讀 203評論 0 0
  • 不可復(fù)制,不可言喻的美 一 二零一四年的某一天,在面包旅行偶然間看到那張盧塞恩垂死獅像的照片,沒有特效,沒有...
    Eastwood_閱讀 415評論 0 0
  • 尋得“羅小姐的店” 位于鬧市一隅 選料勾畫裁剪 穿針引線縫制 耐心方能做成 用心才筑精致 感曰: 花得時間 耗得精...
    曾子玲閱讀 192評論 0 0