undefined :是一個(gè)特殊的值访惜,值類型
var message;
var isUnderfinder = message == undefined;
alert(isUnderfinder);//true
alert(typeof message);//undefined
Null:代表不存在椿疗,值類型
var car = null;
alert(typeof car);//object
if(car != null){
// 對(duì)car對(duì)象執(zhí)行操作
}
// undefined 值派生自null
alert(null == undefined);// true
// null 和 undefinde该肴,無(wú)論何時(shí)都沒(méi)有必要顯式的設(shè)置變量undefined风皿,但是null需要顯式賦值
// 只要意在保存對(duì)象河爹,還沒(méi)有真正保存的時(shí)候?qū)⑵湓O(shè)置為null,體現(xiàn)null座位空指針
后面介紹三個(gè)特殊的引用類型Boolean,Number,String桐款,包裝類型,注意區(qū)別值類型的三個(gè)
boolean
// true false
var message = Boolean("str");//true
var message = Boolean("");//false
number
// NaN
isNaN();
// 數(shù)值轉(zhuǎn)化
var num = Number("hello");// nan
num = Number("");// 0
num = Number("000111");// 111
num = Number(true);// 1
num = parseInt("111");// 111
// 轉(zhuǎn)化為int 第一個(gè)參數(shù)數(shù)值夷恍,第二個(gè)參數(shù)進(jìn)制
num = parseInt("10",2);// 2
num = parseInt("10",8);// 8
num = parseInt("10",10);// 10
num = parseInt("10",16);// 16
// 轉(zhuǎn)化為float
num = parseFloat("0.145");// 0.145
string
var string = "string";
// length
string.length;// 6
// +
var lang = string+" add";// string add
// 數(shù)值魔眨,對(duì)象,布爾酿雪,字符串都有個(gè)toString 的方法
var num = 10;
num.toString();// "10"
num.toString(2);// "1010"
num.toString(8);// "12"
num.toString(10);// "10"
num.toString(16);// "a"
// 轉(zhuǎn)型函數(shù)
var value = 10;
alert(String(value)); // "10"
alert(String(null)); // "null"
alert(String(undefined)); // "undefined"
object
// 對(duì)象類型
var o = new Object();
// 對(duì)象所擁有的屬性
Constructor:保存用于創(chuàng)建當(dāng)前對(duì)象的函數(shù)遏暴,此處存的就是Object();
// 對(duì)象所擁有的方法
hasOwnProperty(propertyName);//檢查對(duì)象是否擁有屬性
isPrototytypeof(object);//對(duì)象是否是另一個(gè)對(duì)象原型
propertyIsEnumerable(propertyName);//檢查屬性能否用for in枚舉
toLocaleString();//
toString();//
valueOf();//
Function
// 聲明方式一
function sum(num1,num2){
return num1 + num2;
}
var sum = function(num1,num2){
return num1 + num2;
}
// 聲明方式二(不推薦)
var sum = new Function("num1","num2","return num1+num2");
// 使用
function sum(num1,num2){
return num1 + num2;
}
sum(10,10);//20
var an = sum;
an(10,10);//20
sum = null;
an(10,10);//20
// 函數(shù)是指類型非引用類型
// 沒(méi)有重載
function addSomeNumber(num){
return 100+sum;
}
function addSomeNumber(num){
return 200+sum;
}
addSomeNumber(100);//300
//等價(jià)上面代碼
var addSomeNumber = function(num){
return sum+100;
}
addSomeNumber = function(num){
return sum+200;
}
addSomeNumber(100);//300
// 函數(shù)聲明
sum(10,10);// 完全可以運(yùn)行,
function sum(num1,num2){
return num1+num2;
}
// 下面無(wú)法運(yùn)行
sum(10,10);
var sum = function (num1,num2){
return num1+num2;
}
// 原因是函數(shù)位于初始化語(yǔ)句中指黎,而不是函數(shù)聲明
// 函數(shù)做為值
function call(someFunction, num){
return someFunction(num);
}
var addSomeNumber = function(num){
return sum+100;
}
var result = call(addSomeNumber,100);
result;//200
// 函數(shù)可以作為返回值
function compare(propertyName){
return function(object1,object2){
return object1[propertyName]>object2[propertyName]
}
}
// using
var peoples = [{name:"people1",age:23},{name:"people2",age:24}];
peoples.sort(compare("age"));
// 函數(shù)屬性
// arguments.callee
function factorial(num){
if(num<=1){
return 1;
}
return num*factorial(num-1);
}
// 當(dāng)函數(shù)名稱改變時(shí)朋凉,num*factorial(num-1);也必須變,為了消除這個(gè)強(qiáng)耦合
function factorial(num){
if(num<=1){
return 1;
}
return num* arguments.callee(num-1);
}
// this 飲用的是函數(shù)執(zhí)行的環(huán)境對(duì)象
window.color = "red";
var blue = {color:"red"};
function sayColor(){
alert(this.color);
}
sayColor();// red
blue.sayColor = sayColor;
blue.sayColor(); //blue
// caller
function outer(){
inner();
}
function inner(){
alert(inner.caller);
}
outer();// 會(huì)顯示outer函數(shù)的源代碼
// 可以結(jié)合 arguments.callee使用,重寫(xiě)為
function inner(){
alert(arguments.callee.caller);
}
// 注意caller 屬性只讀的醋安,手動(dòng)賦值導(dǎo)致錯(cuò)誤
// length表示函數(shù)期望接受的參數(shù)個(gè)數(shù)
// prototype 保存所有實(shí)例方法的實(shí)際所在
// 函數(shù)的方法每個(gè)函數(shù)都包含兩個(gè)非繼承來(lái)的方法
// apply()
// call()
// 上面2函數(shù)的作用都是在特定的作用域內(nèi)調(diào)用函數(shù)杂彭,實(shí)際等于設(shè)置函數(shù)體內(nèi)this對(duì)象的值
// apple 參數(shù)2個(gè)墓毒,一個(gè)是作用域,一個(gè)是參數(shù)數(shù)組(可以是數(shù)組亲怠,亦可argument)
function sum(num1,num2){
return sum1+sum2;
}
function callsum1(num1,num2){
return sum.apply(this,argument);
}
function callsum2(num1,num2){
return sum.apply(this,[num1, num2]);
}
callsum1(10,10);// 20
callsum2(10,10);// 20
// call和apply一樣所计,只是參數(shù)需要一一列舉出
function callsum(num1,num2){
return sum.call(this, num1, num2);
}
callsum(10,10);// 20
// apply call的作用主要是擴(kuò)充函數(shù)的作用域
window.color = "red";
var o = {color:"blue"};
function sayColor(){
alert(this.color);
}
sayColor.call(this);//red
sayColor.call(window);//red
sayColor.call(o);//blue
// 函數(shù)的bind()方法
// 此方法會(huì)創(chuàng)建一個(gè)函數(shù)實(shí)例,this值會(huì)綁定傳給bind()函數(shù)的值
window.color = "red";
var o = {color:"blue"};
function sayColor(){
alert(this.color);
}
var objectSayColor = sayColor.bind(o);
objectSayColor();//blue
Array
var color = new Array("red","blue");
color[2] = "black";
alert(color[2]);
// 數(shù)組的屬性和方法
color.length;
Array.isArray(color);
color.toString();//"red,blue,black"
color.valueOf();//"red,blue,black"
color;//"red,blue,black"
// 轉(zhuǎn)換方法(label語(yǔ)法使用)
var person1 = {
toLocaleString:function(){
return "nikolaos";
}
toString:function(){
return "nicholas";
}
};
var person2 = {
toLocaleString:function(){
return "ccc";
}
toString:function(){
return "Greg";
}
};
var peoples = [person1,person2];
peoples; // nicholas, Greg
peoples.toString; // nicholas, Greg
peoples.toLocaleString; //nikolaos, ccc
// 數(shù)組棧操作
// 入:push(從最上面入,即最后面)团秽,unshift(從最下面入主胧,即最前面 ) 返回長(zhǎng)度
// 出:pop(最上面即最后一個(gè)) shift(最下面即第一個(gè)) 返回所在位置的元素
var color = new Array("blue");
var count = color.push("red","yellow");// 3
var c = color.pop();//yellow
var first = color.shift();//blue
color.length; //2
// 數(shù)組排序
reverse();// 反轉(zhuǎn)數(shù)組順序
function compare (value1,value2){
if(value1 < value2){
return -1;
}
return 1;
}
sore(compare);//參數(shù)是fun
// 操作方法
// concat() 數(shù)組拼接,不會(huì)改變?cè)瓟?shù)組
var colors = ["red","green","blue"];
var colors2 = colors.concat("yellow",["black","brown"]);// red, green, blue, yellow, black, brown
// slice() 數(shù)組裁剪习勤,不會(huì)改變?cè)瓟?shù)組
var colors = ["red","green","blue","yellow","black","brown"];
var colors2 = colors.slice(1);// green,blue,yellow,black,brown 從位置1開(kāi)始
var colors3 = colors.slice(1,4);// green,blue,yellow 從位置1開(kāi)始到位置4結(jié)束踪栋,不包括位置4
// splice 刪除,插入图毕,替換 ,會(huì)改變?cè)瓟?shù)組
var colors = ["red","green","blue"];
var removed = colors.splice(0,1);
colors;// green,blue
removed;// red
removed = colors.splice(1,0,"yellow","orange");//從位置1開(kāi)始插入2項(xiàng)
colors;// green, yellow,orange,blue
removed;// 空數(shù)組
removed = colors.splice(1,1,"red","purple");//插入2項(xiàng)刪除1項(xiàng)
colors;// green, red, purple,orange,blue
removed;// yellow
// 位置方法
// indexOf 從數(shù)組開(kāi)頭找
// lastIndexOf 從數(shù)組末尾找
// 迭代方法 以下方法都不改變數(shù)組,參數(shù)都是function
// every(); 數(shù)組每一項(xiàng)運(yùn)行指定函數(shù)夷都,都為true,返回true (&&)
// filter(); 數(shù)組每一項(xiàng)運(yùn)行指定函數(shù)吴旋,返回返回true的元素組成的數(shù)組损肛,篩選符合要求的項(xiàng)組成的數(shù)組
// forEach();數(shù)組每一項(xiàng)運(yùn)行指定函數(shù),無(wú)返回值
// map();數(shù)組每一項(xiàng)運(yùn)行指定函數(shù)荣瑟,返回返回結(jié)果組成的數(shù)組
// some();數(shù)組每一項(xiàng)運(yùn)行指定函數(shù)治拿,只要任一個(gè)返回結(jié)果是true則返回true (||)
// 縮小方法 參數(shù)都是function (前一個(gè)值,當(dāng)前值,項(xiàng)的索引,數(shù)組)
// reduce() 從數(shù)組第一項(xiàng)開(kāi)始,往后遍歷
// reduceRight() 從數(shù)組最后一項(xiàng)開(kāi)始笆焰,往前遍歷
var values = [1,2,3,4,5];
var sum = values.reduce(function(prev,cur,index,arr){
return pre + cur;
});// 此函數(shù)的返回值座位第一個(gè)參數(shù)傳遞給下一項(xiàng)
sum;// 15
// join("|");
// 把 arrayObject 的每個(gè)元素轉(zhuǎn)換為字符串劫谅,然后把這些字符串連接起來(lái),返回一個(gè)string
date
// 1970.1.1
var now = new Date();
// 2個(gè)構(gòu)造函數(shù)
Date.parse();// 參數(shù)是表示日期的字符串嚷掠,返回相應(yīng)日起的毫秒數(shù)捏检,若不能被識(shí)別返回nan
//eg:
var someDate = new Date(Date.parse("May 25 , 2004"));
var someDate = new Date("May 25 , 2004");// 與上面等價(jià)
Date.UTC(); //參數(shù)是年月日時(shí)分秒毫秒,返回相應(yīng)日起的毫秒數(shù)
// eg:
var y2k = new Date(Date.UTC(2000,0));// 2000年1月1日午夜零時(shí)
var all = new Date(Date.UTC(2005,4,5,17,55,55));// 2005年5月5日下午5:55:55
// 繼承的方法
// 一起他引用類型一樣date也重寫(xiě)了to string和value of to localestring 方法
// 日期格式化
toDateString()
toTimeString()
toLocaleDateString()
toLocaleTimeString()
toUTCString()
// 組件化方法如下圖所示
RegExp(正則)
// g:表示全局不皆,被應(yīng)用于整個(gè)字符串贯城,而非發(fā)現(xiàn)第一個(gè)立即停止 i:不區(qū)分大小寫(xiě) m:表示多行模式
var pattern = /at/g;//匹配所有at實(shí)例
var pattern = /[bc]at/i;// 第一個(gè)bat或cat,不區(qū)分大小寫(xiě)
var pattern = /.at/gi;//以at結(jié)尾的三個(gè)字符的組合霹娄,不區(qū)分大小寫(xiě)
// 元字符必須轉(zhuǎn)義([{\^$\)?*+.]})
// RegExp屬性如下圖:
// 實(shí)例方法如下圖:
// 構(gòu)造函數(shù)如下圖:
三個(gè)特殊的引用類型Boolean,Number,String
String
var s1 = "some text";
var s2 = s1.substring(2);
// 可以把上面代碼想象成如下三步
var s1 = new String("some text");
var s2 = s1.substring(2);
s1 = null;
// 那么
var s1 = "some text";
s1.color = "red";
alert(s1.color);//undefined
// 原因是第二行創(chuàng)建的string對(duì)象在執(zhí)行第三行代碼的前就被銷毀了能犯,第三行代碼創(chuàng)建了一個(gè)新的實(shí)例,此實(shí)例無(wú)color屬性
// 轉(zhuǎn)型函數(shù)和構(gòu)造函數(shù)
var value = "25";
var number = Number(value);//轉(zhuǎn)型
alert(typeof number);//number
var obj = new Number(value);//構(gòu)造
alert(typeof number);//object
Boolean
var falseObject = new Boolean(false);
var result = falseObject && true;//true
var falseValue = false;
var result = falseValue && true;//false
Number
var numberObj = new Number(10);
var num = 10;
// 對(duì)象方法
var num = 10;
num.toFixed(2);// 10.00
num.toExponential(1);//1.0e+1
var num = 10.005;
num.toFixed(2);// 10.01
var num = 99;
num.toPrecision(1);//1e+2 一位數(shù)無(wú)法表示99故四舍五入了
num.toPrecision(2);//99
num.toPrecision(3);//99.0
String
var stringObject = new String("hello word");
var stringValue = "hello word";
stringValue.length;// 11
stringValue.charAt(1);//e
stringValue.charCodeAt(1);//101
stringValue[1];//e
var stringValue = "hello ";
var result = stringValue.concat("word");//hello word
var result = stringValue.concat("word","!");//hello word!
stringValue;//hello
var stringValue = "hello world";
stringValue.slice(3);//lo world
stringValue.substring(3);//lo world
stringValue.substr(3);//lo world
stringValue.slice(3,7);//lo w
stringValue.substring(3,7);//lo w
stringValue.substr(3,7);//lo worl
// 參數(shù)為負(fù)數(shù)時(shí)犬耻, 實(shí)際值 = 長(zhǎng)度+(負(fù)數(shù))
stringValue.slice(-3);//rld == stringValue.slice(8);
var stringValue = "hello world";
stringValue.indexof("o");//4
stringValue.lastIndexof("o");//7
stringValue.indexof("o",6);//7 從位置6開(kāi)始往后檢索
stringValue.lastIndexof("o",6);//4 從位置6開(kāi)始往前檢索
// trim 去除首尾空
var stringValue = " hello world ";
var trimstringValue = stringValue.trim();//"hello world"
stringValue;//" hello world "
// 大小寫(xiě)
// toLowerCase(),toUpperCase(); 通用
// toLocaleLowerCase(),toLocaleUpperCase(); 針對(duì)地區(qū)
// 正則匹配
var text = "cat , bat ,sat , fat";
var pattern = /.at/;
var matches = text.match(pattern);//返回?cái)?shù)組
matches.index;//0
matches[0];//cat
pattern.lastindex;//0
//search()
var text = "cat , bat ,sat , fat";
var pos = text.search(/at/);// 1
//replace()
var text = "cat , bat ,sat , fat";
var result = text.replace("at","ond");//cond , bat , sat , fat
result = text.replace(/at/g,"ond");////cond , bond , sond , fond
// 更精細(xì)的使用見(jiàn)下圖
// 比較2字符串 localecompare
var str = String.fromCharCode(104,101,108,108,111);//hello
// html 相關(guān)見(jiàn)下圖