部分與編譯型語言有區別的語法
數據類型
NaN:表示不是數字
undefined:未初始化
表達式:
==
:不嚴格的判等 “10” == 10 true
===
:嚴格的判等 “10”===10 false
!==
!===
分支結構
switch 語句中 用的是嚴格的判等
數組
聲明方式:
var array = new Array(); // 空數組
var array = new Array(10); // 內容爲undefined
var array = new array(10,20,30); //number數組
var array = []; //空數組
var array = [10,20,30]; //number數組
數組長度可以改變
var array = []; //聲明一個空數組
var array[0] = 10; //往裏面添加元素
var array[1] = 20;
console.log(array.length) //數組長度改變
函數
- 定義
//聲明
function fun(){
}
//參數不需要聲明類型(沒法聲明類型)
function fun(x,y){
}
//如果沒有返回值或return; 則會得到一個undefined
console.log(fun(1,2));
- arguments對象
arguments就是參數列表的數組(僞數組)
function fun(){
//此操作可以顯示傳入的參數長度,即使函數參數列表沒有聲明。
console.log(arguments.length);
console.log(arguments);//打印參數列表的值
}
fun(1,2,3);
- 命名函數與匿名函數
var fun = function () {
}
這種方式叫函數表達式
普通同名函數,後定義的函數會覆蓋前面的函數,而函數表達式和變量賦值類似。
4. 函數自調用
(function () {
console.log("aaaa")
})();
- 函數作爲參數使用:
function f1(f2) {
f2();
console.log("bbbb");
}
function f2() {
console.log("aaaa");
}
f1(f2);
- 函數作爲返回值使用
function f1() {
return function () {
console.log("aaaa");
}
}
var ff = f1();
ff();
總結:
函數名的本質就是函數體。
函數的數據類型是function。
JS中的作用域
- 兩個script標籤可以使用一個變量
** js裏沒有塊級作用域
只有函數中聲明的吧變量是局部變量,其他任何位置聲明的變量都是全局變量。
<script>
var num = 1;
</script>
<script>
alert(num); //1
</script>
- 隱式全局變量
function f() {
num = 10; //不用var聲明.
delete num;
}
//可以訪問到函數內的變量,因此此函數不會被釋放內存
console.log(num);
//delete 關鍵字可以刪除隱式全局變量
delete num;
//但無法刪除var聲明的變量
JS中的預解析
js代碼會預先聲明變量,只要變量被聲明,無論變量在什麼位置,解釋器會提前聲明,
函數會調整順序,無論函數體在什麼位置,只要有這個函數,就能被整確調用。
注意
var num = 1;
function f1() {
//隱式的var num;
console.log(num); //此結果仍然是undefined 因爲js會預解析
var num = 20;
}
f1();
f1();
var num = 1; //函數會被提前,這個變量的聲明也會提升到變量使用之前
function f1() {
console.log(num); //此結果仍然是undefined
}
function f1() {
console.log(num); //此結果仍然是undefined
var num = 1;
}
f1();
console.log(num); //報錯、提升只會在作用域裏面進行
//多個標籤預解析不衝突(各標籤各玩各的)
<script>
f1(); //aaaa
function f() {
console.log("aaaa");
}
</script>
<script>
f1(); //bbbb
function f() {
console.log("bbbb");
}
</script>
console.log(a); // a的函數體
function a() {
console.log("123");
}
var a = 10;
console.log(a); //10;
//提升時,總是變量在前,函數在後進行提升
```