javascript基本概念

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的實際應用

相關文章
相關標籤/搜索