- ECMAScript js的標(biāo)準(zhǔn)語法
- DOM(html每一個(gè)標(biāo)簽對(duì)應(yīng)一個(gè)對(duì)象)
- html(控制內(nèi)容)+css(控制樣式)+js(控制行為)
html+js
-
嵌入式
<head> <script> //js代碼 </script> </head>
-
導(dǎo)入(保證了html和js代碼解耦)
<head> <script src=""></script> </head>
注釋
兩種
//
-
/*
*/
標(biāo)識(shí)符
由字母秦士,數(shù)字敞临,下劃線块差,$虽画,不能以數(shù)字開頭,不能為關(guān)鍵字
數(shù)據(jù)類型(數(shù)據(jù)最小的單位)
弱類型語言
- 基本數(shù)據(jù)類型
- undefined;
var a;//a的數(shù)據(jù)類型undefined - null;
var b=null;//b的數(shù)據(jù)類型null
var result=typeof b; //object - number;
var a=10; - boolean确徙;
var a=true; - string;
"" , '';
檢測(cè)變量所屬的數(shù)據(jù)類型
var sesult =typeof 變量名
提問框
var result = prompt("提問內(nèi)容");
alert("提示信息");
console.log();
基本數(shù)據(jù)類型之間的轉(zhuǎn)換
Undefiend
一般不考慮其他基本數(shù)據(jù)類型轉(zhuǎn)換為undefined
Null類型
一般不考慮其他基本數(shù)據(jù)類型轉(zhuǎn)換為null
Boolean類型
其他類型轉(zhuǎn)換為Boolean:
雖然boolean類型的取值只有兩個(gè)执桌,但是ECMAScript中所有的類型的值都有
與這兩個(gè)Boolean值等價(jià)的值
Boolean true false
String 非空字符串 ""
Number 任何非0非NaN 0和NaN
Undefined undefined
Null null
例如:
Boolean(""); //false
Boolean(0); //false
Boolean(NaN); //false
Boolean(null) //false
Boolean(undefined) //false
Boolean("briup"); //true
Boolean(1); //true
Number
isNaN(para) 當(dāng)參數(shù)para不是數(shù)值的時(shí)候返回true
數(shù)值轉(zhuǎn)換
Number()
如果轉(zhuǎn)換的值是null,undefined,number,boolean
Number(true); //1
Number(false); //0
Number(10); //10 如果是數(shù)字值,原樣輸出
Number(null); //0
Number(undefined); //NaN
如果是字符串:
Number("123"); //如果僅包含數(shù)值鄙皇,轉(zhuǎn)換為對(duì)應(yīng)的數(shù)值
Number("234.1");//解析為對(duì)應(yīng)的小數(shù)
Number("+12.1");//首位為符號(hào)位,其余為為數(shù)值仰挣,轉(zhuǎn)換為對(duì)應(yīng)的數(shù)值
NUmber("1+2.3");//NaN 符號(hào)位出現(xiàn)在其他位置伴逸,解析為NaN
Number("0xa"); //如果僅包含十六進(jìn)制格式,轉(zhuǎn)為為對(duì)應(yīng)的十進(jìn)制的值
Number("010"); //注意膘壶!不會(huì)當(dāng)做八進(jìn)制被解析错蝴,結(jié)果為10
Number(""); //空字符串被轉(zhuǎn)換為0
Number("123ac");//包含其他字符: NaN
Number(" 12"); //12
parseInt()
-
如果轉(zhuǎn)換的值是null,undefined,number,boolean
parseInt(true); //NaN parseInt(false); //NaN parseInt(null); //NaN parseInt(undefined); //NaN parseInt(10); //10 如果是整數(shù)值,原樣輸出 parseInt(10.3); //10 如果是小數(shù)颓芭,舍去小數(shù)點(diǎn)一級(jí)后面的內(nèi)容
-
如果是字符串:
parseInt("123"); //123顷锰;如果僅包含數(shù)值,轉(zhuǎn)換為對(duì)應(yīng)的數(shù)值 parseInt("234.1");//234亡问;小數(shù)點(diǎn)后面的數(shù)值省略 parseInt("+12.1");//12官紫; 首位為符號(hào)位,其余為為數(shù)值玛界,轉(zhuǎn)換為整數(shù)万矾,結(jié)果為 parseInt("0xa"); //10; 如果僅包含十六進(jìn)制格式慎框,轉(zhuǎn)為為對(duì)應(yīng)的十進(jìn)制的值 parseInt("010"); //10; 注意后添!不會(huì)當(dāng)做八進(jìn)制被解析笨枯,結(jié)果為10 parseInt(""); //NaN;空字符串被轉(zhuǎn)換為NaN parseInt("1+2.3");//1; 如果首位為數(shù)值,依次向后解析馅精,找到連續(xù)的數(shù)值严嗜,直到 遇到第一個(gè)非數(shù)值的,將之前獲取的數(shù)值轉(zhuǎn)換為Number返回 parseInt("123ac");//123;
parseFloat()
與parseInt()類似洲敢,
但是會(huì)將小數(shù)轉(zhuǎn)換為對(duì)應(yīng)的小數(shù)
String
toString() 轉(zhuǎn)化為字符串
包裝器類 number -> Number
var num = 10;
num.toString(); "10"
num.toString(2); "1010"
num.toString(8); "12"
num.toString(16);"a"
注意:
null ,undefined 沒有toString() 方法
null.toString() //報(bào)錯(cuò) TypeError: null has no properties
undefined.toString(); //報(bào)錯(cuò) TypeError: undefined has no properties
String() 用來將任意數(shù)據(jù)類型轉(zhuǎn)換為字符串
String(null) "null"
String(undefined); "undefined"
復(fù)雜數(shù)據(jù)類型 Object
ECMAScript中的對(duì)象其實(shí)就是一組數(shù)據(jù)和功能的集合漫玄。
創(chuàng)建Object實(shí)例:
new Object() => {}; 創(chuàng)建一個(gè)空對(duì)象
new Object();
var person = new Object();
person.name = "briup";
person.age = 22;
使用對(duì)象字面量表示法
不同的屬性之間用','分割,屬性名和屬性值之間用':'分割
var person = {
name : "briup",
age : 22
};
訪問對(duì)象屬性
點(diǎn)表示法压彭,右側(cè)必須是以屬性名稱命名的簡(jiǎn)單標(biāo)識(shí)符
person.name
中括號(hào)表示法睦优,中括號(hào)中必須是一個(gè)計(jì)算結(jié)果為字符串的表達(dá)式
可以通過變量訪問屬性
var a = "name";
person[a]; //既person["name"]
person["first name"]
如果屬性名中包含語法錯(cuò)誤的字符,或者屬性名使用的是關(guān)鍵字或保留字壮不,
可以使用中括號(hào) person["first name"]
刪除屬性
delete只是斷開了屬性和宿主對(duì)象的聯(lián)系汗盘,而不會(huì)操作屬性中的屬性,并且delete
只會(huì)刪除自有屬性询一,不能刪除繼承屬性隐孽。在銷毀對(duì)象時(shí),為了防止內(nèi)存泄露健蕊,遍歷屬
性中的屬性菱阵,依次刪除所有屬性。
- 語法:delete 屬性訪問表達(dá)式
- 例子:delete stu.name //刪除學(xué)生對(duì)象中的name屬性
檢測(cè)屬性
in 檢測(cè)某屬性是否是某對(duì)象的自有屬性或者是繼承屬性
"toString" in student
hasOwnProperty()檢測(cè)給定的屬性是否是對(duì)象的自有屬性缩功,對(duì)于繼承屬性將返回false
var o = {
x:1
}
o.hasOwnProperty("x"); //true, x 為o的自有屬性
o.hasOwnProperty("y"); //false,o 中不存在屬性y
o.hasOwnProperty("toString"); //toString為繼承屬性
propertyIsEnumerable() 檢測(cè)給定的屬性是否是該對(duì)象的自有屬性晴及,并且該屬性是可枚舉的
通常由JS代碼創(chuàng)建的屬性都是可枚舉的,但是可以使用特殊的方法改變可枚舉性掂之。
student.propertyIsEnumerable("toString") //false 不可枚舉
Object屬性及方法
Object 類型所具有的任何屬性和方法也同樣存在于其他對(duì)象中抗俄,任何對(duì)象繼承于Object對(duì)象
Object中常用的方法:
- hasOwnProperty(propertyName); 用于檢查給定的屬性名是否是對(duì)象的自有屬性,
- toString(); 返回對(duì)象的字符串表示
- valueOf(); 返回對(duì)象的字符串世舰,數(shù)值动雹,布爾值的表示。
------- - propertyIsEnumerable(propertyName); 用于檢查給定的屬性在當(dāng)前對(duì)象實(shí)例中是否存在
- constructor: 保存用戶創(chuàng)建當(dāng)前對(duì)象的函數(shù)
- isPrototypeOf(object); 用于檢查傳入的對(duì)象是否是原型
- toLocaleString(); 返回對(duì)象的字符串表示跟压,該字符串與執(zhí)行環(huán)境的地區(qū)對(duì)應(yīng)
對(duì)象序列化
對(duì)象序列化是指將對(duì)象的狀態(tài)轉(zhuǎn)換為字符串胰蝠,也可以反序列化奖唯,將字符串還原為對(duì)象
函數(shù)港谊,RegExp,Error對(duì)象费变,undefined值不能序列化和反序列化哎垦。
- JSON.stringify(obj) 將對(duì)象序列化為Json字符串,只能序列化對(duì)象可枚舉的自有屬性甸怕。
- toJSON() Object原型中沒有toJSON方法洁桌,但是對(duì)于要執(zhí)行序列化的對(duì)象來說
JSON.stringify()方法會(huì)調(diào)用toJSON方法眼五,如果待序列化的對(duì)象中存在這個(gè)
方法吏廉,則調(diào)用笋庄,返回值即時(shí)序列化的結(jié)果效扫,而不是原始對(duì)象倔监。 - JSON.parse(jsonStr) 反序列化