1:typeof 用來判斷變量的數據類型,雖然null是Null數據類型,但返回的是object數據類型;雖然函數是object數據類型,但返回的是function類型javascript
var x=null;typeof x;
"object"java
function x(){}; typeof x;
"function"數組
2:undefined值派生自null值,對它們的相等性測試返回true;"=="操做符處於比較目的會轉換其操做數瀏覽器
undefined==null
truedom
3:Boolean類型的字面值true和false是區分大小寫的,即:True和False都不是Boolean值,是標識符函數
var y=true;y;
true測試
4:能夠對任何數據類型的值調用Boolean函數,並且總會返回一個Boolean值;if語句會自動執行相應的Boolean轉換優化
Boolean(0)
false
Boolean("")
false
Boolean(undefined)
false
Boolean(null)
false
Boolean(false)
false
Boolean(NaN)
falsethis
5:ECMAScript5引入了嚴格模式的概念:經過在腳本頂部添加代碼編譯指示「use strict」的方式,支持嚴格模式的瀏覽器包括IE10+,Firefox4+,Safari5.1+,Opera12+和Chrome編碼
"use strict"
function x(){x=5;}
x();
undefined
6:八進制和十六進制
var x=070,y=9;x+y
65
var x=0xA,y=9;x+y
19
var x=0xa,y=9;x+y
19
7:基於IEEE754數值的浮點計算通病,浮點數值計算會產生舍入偏差
0.1+0.2
0.30000000000000004
8:NaN兩特色:任何涉及NaN的操做都返回NaN;NaN和任何值都不相等,包括自己
5/0
Infinity
NaN/0
NaN
NaN==NaN
false
9:Number函數能夠用於任何數據類型,parseInt和parseFloat主要用於把字符串轉換成數值
Number("")
0
parseInt("")
NaN
Number(null)
0
parseInt(null)
NaN
Number(undefined)
NaN
parseInt(undefined)
NaN
Number( 456KK)
VM1205:2 Uncaught SyntaxError: Unexpected token ILLEGAL
Number(" 456KK")
NaN
parseInt(" 456KK")
456
parseInt(false)
NaN
parseInt(22.5)
22
parseInt(070,8)
46
parseInt(0xa)
10
parseFloat(0xa)
10
parseFloat(0xa,10)
10
parseFloat(0xa,16)
10
10:中文兩個字節,返回值有問題
var x="你好";x.length
2
11:轉換字符串:toString()方法,String()函數,+空字符串
var x=1;x.toString()
"1"
var x=20;x.toString(16)
"14"
var x=null;String(x)
"null"
var x=undefined;String(x)
"undefined"
undefined+""
"undefined"
1+""
"1"
null+""
"null"
true+""
"true"
12:ECMAScript操做符的不同凡響在於它們可以適用於不少值,例如:字符串,數字值,布爾值,甚至對象
var x="";x++
0
var x=true;x++
1
true+false
1
true+""
"true"
true+"ccc"
"trueccc"
true+{}
"true[object Object]"
{}++
VM2136:3 Uncaught SyntaxError: Unexpected token }
var x={};x++
NaN
({})+true
"[object Object]true"
13:位操做符(無符號右移>>>,有符號右移>>,左移<<,按位異或^,按位或|,按位與&,按位非~)
var x=100;
x=~x
-101
var x=25&3
undefined
var x=25 & 3
undefined
var x=25 & 3;x
1
var x=25 | 3
undefined
var x=25 | 3;x
27
var x=25 ^ 3;x
26
14:Boolean類型轉換方法:!!方法和Boolean方法
var x="";Boolean(x);
false
var x="";!!x;
false
15:邏輯與,邏輯或
({}) && true
true
true && ({})
Object {}
"" && true
""
null && true
null
false && ({})
false
"" && null
""
16:注意「1」性操做符容易犯的錯誤
true+1
2
"1"+1
"11"
"1"*1
1
"1"-1
0
17:兩個字符串比較,比較字符編碼值,大寫字母的字符編碼所有小於小寫字母的字符編碼
"Abc"<"abc"
true
"abc"<"cde"
true
"dbc"<"cde"
false
NaN<3
false
NaN>=3
false
"23"<"3"
true
"23"<3
false
18:要比較相等性以前,不能將null和undefined轉換成其它任何值;可是小於或者大於比較時,確能夠進行數值轉換
null<1
true
undefined<1
false
Number(undefined)
NaN
null==0
false
undefined==0
false
null>0
false
null<0
false
19:ECAMAScript中不存在塊級做用域,所以在循環內部定義的變量也能夠在外部訪問到
for(var i=0;i<2;i++){}alert(i);
for(;;){break;}
20:with語句的做用是暫時改變做用域鏈、減小的重複輸入;js的解釋器須要檢查with塊中的變量是否屬於with包含的對象,這將使with語句執行速度大大降低,而且致使js語句很難被優化。因此在之後的高效代碼開發中咱們應該儘量的避免使用with語句
with(this){var a=1;}alert(a);
21:swich語句在比較值時使用的全等操做符。能夠在switch語句中使用任何數據類型;每一個case值不必定是常量,能夠是變量,甚至是表達式
22:arguments是與數組相似的一個對象。修改arguments對象中的值會反映到命名參數中,但修改命名參數的值不會影響arguments對象中的值。他們的內存空間是獨立的,可是他們的值是單行同步;沒有傳遞值得命名參數自動被賦予undedifined值
function finn(a,b,c)
{
console.log(arguments[0]);
arguments[1]=5;
console.log(arguments[1]);
console.log(b);
console.log(c);
}
finn(1,2);
VM1958:4 1
VM1958:6 5
VM1958:7 5
VM1958:8 undefined
23:ECMAScript函數不能像傳統意義那樣實現重載;若是定義兩個名字相同的函數,則該名字只屬於後定義的函數。沒有函數簽名的概念
function finn (a)
{
console.log(a);
};
function finn(a,b)
{
console.log(a+1);
};
finn(1);
VM2237:8 2
24:異常信息:SyntaxError: Unexpected token ILLEGAL(意外的非法標記),每每是因爲中英文狀態錯了
var x=1;x // 英文分號寫成了中文
VM2319:2 Uncaught SyntaxError: Unexpected token ILLEGAL
25:<script>標籤特性:外部javascript擴展名不是必須,動態生成javascript代碼成爲可能;能夠包含外部域的文件;defer延遲腳本
26:javascrpt誕生於1995年。dom,既然是一種模型,那麼他就不單單限制於JavaScript能夠去實現他,在不少語言裏,均可以直接進行dom的相關操做。javascript中的dom實現,只是這種語言對於dom的實際應用