- ECMAScript js的標(biāo)準(zhǔn)語法
- DOM(html每一個標(biāo)簽對應(yīng)一個對象)
- 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ù)字開頭,不能為關(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;
"" , '';
檢測變量所屬的數(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類型的取值只有兩個,但是ECMAScript中所有的類型的值都有
與這兩個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)換為對應(yīng)的數(shù)值
Number("234.1");//解析為對應(yīng)的小數(shù)
Number("+12.1");//首位為符號位,其余為為數(shù)值,轉(zhuǎn)換為對應(yīng)的數(shù)值
NUmber("1+2.3");//NaN 符號位出現(xiàn)在其他位置,解析為NaN
Number("0xa"); //如果僅包含十六進(jìn)制格式,轉(zhuǎn)為為對應(yīng)的十進(jìn)制的值
Number("010"); //注意!不會當(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)一級后面的內(nèi)容
-
如果是字符串:
parseInt("123"); //123;如果僅包含數(shù)值,轉(zhuǎn)換為對應(yīng)的數(shù)值 parseInt("234.1");//234;小數(shù)點(diǎn)后面的數(shù)值省略 parseInt("+12.1");//12; 首位為符號位,其余為為數(shù)值,轉(zhuǎn)換為整數(shù),結(jié)果為 parseInt("0xa"); //10; 如果僅包含十六進(jìn)制格式,轉(zhuǎn)為為對應(yīng)的十進(jìn)制的值 parseInt("010"); //10; 注意!不會當(dāng)做八進(jìn)制被解析,結(jié)果為10 parseInt(""); //NaN;空字符串被轉(zhuǎn)換為NaN parseInt("1+2.3");//1; 如果首位為數(shù)值,依次向后解析,找到連續(xù)的數(shù)值,直到 遇到第一個非數(shù)值的,將之前獲取的數(shù)值轉(zhuǎn)換為Number返回 parseInt("123ac");//123;
parseFloat()
與parseInt()類似,
但是會將小數(shù)轉(zhuǎn)換為對應(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)錯 TypeError: null has no properties
undefined.toString(); //報(bào)錯 TypeError: undefined has no properties
String() 用來將任意數(shù)據(jù)類型轉(zhuǎn)換為字符串
String(null) "null"
String(undefined); "undefined"
復(fù)雜數(shù)據(jù)類型 Object
ECMAScript中的對象其實(shí)就是一組數(shù)據(jù)和功能的集合。
創(chuàng)建Object實(shí)例:
new Object() => {}; 創(chuàng)建一個空對象
new Object();
var person = new Object();
person.name = "briup";
person.age = 22;
使用對象字面量表示法
不同的屬性之間用','分割,屬性名和屬性值之間用':'分割
var person = {
name : "briup",
age : 22
};
訪問對象屬性
點(diǎn)表示法,右側(cè)必須是以屬性名稱命名的簡單標(biāo)識符
person.name
中括號表示法,中括號中必須是一個計(jì)算結(jié)果為字符串的表達(dá)式
可以通過變量訪問屬性
var a = "name";
person[a]; //既person["name"]
person["first name"]
如果屬性名中包含語法錯誤的字符,或者屬性名使用的是關(guān)鍵字或保留字,
可以使用中括號 person["first name"]
刪除屬性
delete只是斷開了屬性和宿主對象的聯(lián)系,而不會操作屬性中的屬性,并且delete
只會刪除自有屬性,不能刪除繼承屬性。在銷毀對象時(shí),為了防止內(nèi)存泄露,遍歷屬
性中的屬性,依次刪除所有屬性。
- 語法:delete 屬性訪問表達(dá)式
- 例子:delete stu.name //刪除學(xué)生對象中的name屬性
檢測屬性
in 檢測某屬性是否是某對象的自有屬性或者是繼承屬性
"toString" in student
hasOwnProperty()檢測給定的屬性是否是對象的自有屬性,對于繼承屬性將返回false
var o = {
x:1
}
o.hasOwnProperty("x"); //true, x 為o的自有屬性
o.hasOwnProperty("y"); //false,o 中不存在屬性y
o.hasOwnProperty("toString"); //toString為繼承屬性
propertyIsEnumerable() 檢測給定的屬性是否是該對象的自有屬性,并且該屬性是可枚舉的
通常由JS代碼創(chuàng)建的屬性都是可枚舉的,但是可以使用特殊的方法改變可枚舉性。
student.propertyIsEnumerable("toString") //false 不可枚舉
Object屬性及方法
Object 類型所具有的任何屬性和方法也同樣存在于其他對象中,任何對象繼承于Object對象
Object中常用的方法:
- hasOwnProperty(propertyName); 用于檢查給定的屬性名是否是對象的自有屬性,
- toString(); 返回對象的字符串表示
- valueOf(); 返回對象的字符串,數(shù)值,布爾值的表示。
------- - propertyIsEnumerable(propertyName); 用于檢查給定的屬性在當(dāng)前對象實(shí)例中是否存在
- constructor: 保存用戶創(chuàng)建當(dāng)前對象的函數(shù)
- isPrototypeOf(object); 用于檢查傳入的對象是否是原型
- toLocaleString(); 返回對象的字符串表示,該字符串與執(zhí)行環(huán)境的地區(qū)對應(yīng)
對象序列化
對象序列化是指將對象的狀態(tài)轉(zhuǎn)換為字符串,也可以反序列化,將字符串還原為對象
函數(shù),RegExp,Error對象,undefined值不能序列化和反序列化。
- JSON.stringify(obj) 將對象序列化為Json字符串,只能序列化對象可枚舉的自有屬性。
- toJSON() Object原型中沒有toJSON方法,但是對于要執(zhí)行序列化的對象來說
JSON.stringify()方法會調(diào)用toJSON方法,如果待序列化的對象中存在這個
方法,則調(diào)用,返回值即時(shí)序列化的結(jié)果,而不是原始對象。 - JSON.parse(jsonStr) 反序列化