使用嚴格模式
定義
具有作用域特點
- 全局
"use strict";
...
-局部
(function(){
"use strict";
...
})();
規(guī)定
定義變量必須用 var
屬性名、參數(shù)名 不能重名
禁用八進制表示數(shù)字,整數(shù)的第一位如果是0,表示這是八進制數(shù)
不能刪除變量 delete
保留字不能用作標識符
禁止使用with語句
創(chuàng)設(shè)eval作用域
禁止this關(guān)鍵字指向全局對象
禁止在函數(shù)內(nèi)部遍歷調(diào)用棧
函數(shù)必須聲明在頂層
這里可以推薦大家閱讀下阮老師的博文
阮一峰 - Javascript 嚴格模式詳解
注釋
單行用 \
多行用
/* ... */
/*
*/
語句
一行一個語句
分號結(jié)尾
大括號表示代碼段
關(guān)鍵字&保留字
- 參考 ECMA-262 中定義
數(shù)據(jù)類型
變量
- 弱類型 可以互相轉(zhuǎn)換
- 性質(zhì) 包存值的占位符
- 定義 用var來聲明
數(shù)據(jù)類型分類
簡單數(shù)據(jù)類型
- Undefined 沒有對象
- NULL 空指針
- String
單引號 雙引號 完全相同
都可以轉(zhuǎn)義 反斜杠 \ ,換行 \n
整個代碼上下文統(tǒng)一
- Number
Number.MAX_VALUE
Number.MIN_VALUE
檢查是否能表示
isFinite(13213213)
var n = 1e
NaN 非法數(shù)字
isNaN('aaa') 是否非法數(shù)字
true
Number('1231') 數(shù)字轉(zhuǎn)換
e 是科學(xué)計數(shù)法
var y=123e5; // 12300000
var z=123e-5; // 0.00123
parseInt 轉(zhuǎn)整形
parseFloat 轉(zhuǎn)浮點
- Boolean
復(fù)雜數(shù)據(jù)類型
- Object
表示值或函數(shù)方法
無序
var objs = new Object();
Object {}
var objs = {};
typeof
var a = 1e5
typeof(a)
"number"
操作符
一元操作符
++ --
前置 先計算和賦值一起操作
后置 計算后再賦值int n = 1
++n
2
n++
2
n
3
位操作符
布爾操作符
與 或 非
alert(1&&2)的結(jié)果是2
只要“&&”前面是false,無論“&&”后面是true還是false,結(jié)果都將返“&&”前面的值;
只要“&&”前面是true,無論“&&”后面是true還是false,結(jié)果都將返“&&”后面的值;
alert(0||1)的結(jié)果是1
只要“||”前面為false,不管“||”后面是true還是false,都返回“||”后面的值。
只要“||”前面為true,不管“||”后面是true還是false,都返回“||”前面的值。
四則運算操作符
加、減、乘、除、求模
關(guān)系操作符
大于 等于 不等于 等于
全等于 === 會比較類型
全不等 !==
條件操作符
var a = (a>b ? a : b)
賦值操作符
=
+= -= *= /= %=
位運算 <<= 、>>= 、>>>=
逗號操作符
var a = 1, b = 2, c= 3
語句
條件
if(){}else{}else if{}
循環(huán)
while(true){}
do{}while(true)
for(var i =0;i<=numMax;i++){}
for(var key in 對象或數(shù)組){}
分支
switch(表達式、變量或值){ case 值或表達式: ... break; }
break 與 continue
with語句
with(req.session.user){
log(name,sex);
}
label語句
var itemsPassed = 0;
var i, j;
top:
for (i = 0; i < items.length; i++){
for (j = 0; j < tests.length; j++)
if (!tests[j].pass(items[i]))
continue top;
itemsPassed++;
}
函數(shù)
定義
function sum(a,b){
console.log('sum : ', a+b);
}
var sum2 = new Function(
'a',
'b',
'console.log('sum : ', a+b);'
);
var sum3 = function(a,b){
console.log('sum : ', a+b);
};
默認返回值
Undefined
保留字 arguments
function testArg(){
console.log('arguments: ', arguments);
}
testArg(1,2,3,4,5);
參數(shù)個數(shù)
sum.length
2
特性
匿名
回調(diào)
變量
定義
var 方式是局部
默認是全局(不推薦)
ECMAScript 引用類型
Object 類型
var obj = {name:'aaa'}
obj.name
obj['name']
基本包裝類型
基本類型自帶的方法
如 String.toString()
Global 對象
屬性
infinity nan undefined null
方法
eval() isFinite() isNan() ...
Math 對象
數(shù)學(xué)對象
Math.PI Math.E Math.SQRT2 Math.SQRT1_2 Math.min() Math.max()
Math.random()
數(shù)組
初始
var arr = new Array(3);
var arr = new Array('a', 'b', false);
var arr[4] = 'ab';
檢查
arr instanceof Array
Array.isArray(arr)
轉(zhuǎn)換與排序
var obj = {a:1, b:2, c:3, d:false};
Object.keys(obj);
Object.keys(obj).length;
// 分割
var str = 'a b c d';
str.split(' ');
// 打印
str.toString();
a,b,c,d
str.join('|');
a|b|c|d
// 排序
var arr = [11,2,33,66,55];
function compareAB(a,b){
if(a > b){
return 1;
} else if(a === b){
return 0;
}else if(a < b){
return -1;
}
}
arr.sort(compareAB);
console.log(arr);
棧和隊列操作
// 壓入,加在尾端
arr.push(100,101);
// 彈出,尾端出棧
arr.pop();
// 隊列,頭部彈出
arr.shift();
// 隊列,頭部壓入
arr.unshift(222);
其它
// concat 連接另一個數(shù)組,加入尾端
var arr1 = ['a1','a2'];
arr.concat(arr1)
// slice 取出
arr.slice(2,5); // 從2位置取到5,取出3個
// splice 刪除、插入
arr.splice(1,1); // 從1位置刪除1個
arr.splice(1,0,'a3','a4'); // 從1的位置 刪除0個 插入 a3 a4
// 定位
indexOf();// 頭部開始
lastIndexOf();// 尾部開始
// 加工函數(shù),需要傳入自定義函數(shù)
// every() 所有的成員都返回true 才是 true
arr.every(function(m){
return m > 10;
});
// some() 有一個是true 就是 true
arr.some(function(m){
return m > 10;
});
//filter() 返回值為true的組成一個新數(shù)組
arr.filter(function(m){
return m > 10;
});
//map() 對數(shù)據(jù)處理 返回新數(shù)組
arr.map(function(m){
return m + 10;
});
//forEach() 數(shù)組循環(huán)遍歷
arr.forEach(function(m){
console.log(m);
});
// reduce() prev 是上次的return 結(jié)果
arr.reduce(function(prev, cur, index, arr){
return prev + cur;
});
// reduceRight() 是反序列操作