js 數(shù)據(jù)類型

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()
// 組件化方法如下圖所示
9243219F-FFDF-417D-A97F-4F149CF003EE.png

D6E752EC-9FD5-46F2-94FA-240F7E72ABA3.png

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屬性如下圖:
2507A112-16E3-48E1-86A0-16933ED02E83.png
// 實(shí)例方法如下圖:
0A34AE18-6438-4F19-A567-C801D57D7AA7.png

974330FB-4196-451D-B4DD-3D1E5CA7D51D.png

2B1BC3B2-8A01-451F-8C52-B8C18D775D7C.png
// 構(gòu)造函數(shù)如下圖:
8300D2AF-C329-45DF-B931-ABFD05E50A9D.png

0D562DA3-1E1A-42CC-B70C-5D0482D13420.png

三個(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)下圖
31197A58-AF3C-4668-AA82-CF6A7E0B3126.png

2044AF11-6B5A-4732-9191-9BC2D8DFFAD8.png
// 比較2字符串 localecompare
var str = String.fromCharCode(104,101,108,108,111);//hello
// html 相關(guān)見(jiàn)下圖
2B0254DA-55F8-43EE-AE33-DA22187D448D.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末踩晶,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子枕磁,更是在濱河造成了極大的恐慌渡蜻,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異茸苇,居然都是意外死亡排苍,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)税弃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)纪岁,“玉大人,你說(shuō)我怎么就攤上這事则果♂:玻” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵西壮,是天一觀的道長(zhǎng)遗增。 經(jīng)常有香客問(wèn)我,道長(zhǎng)款青,這世上最難降的妖魔是什么做修? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮抡草,結(jié)果婚禮上饰及,老公的妹妹穿的比我還像新娘。我一直安慰自己康震,他們只是感情好燎含,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著腿短,像睡著了一般屏箍。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上橘忱,一...
    開(kāi)封第一講書(shū)人閱讀 49,144評(píng)論 1 285
  • 那天赴魁,我揣著相機(jī)與錄音,去河邊找鬼钝诚。 笑死颖御,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的凝颇。 我是一名探鬼主播郎嫁,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼祈噪!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起尚辑,我...
    開(kāi)封第一講書(shū)人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤辑鲤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后杠茬,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體月褥,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡弛随,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了宁赤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片舀透。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖决左,靈堂內(nèi)的尸體忽然破棺而出愕够,到底是詐尸還是另有隱情,我是刑警寧澤佛猛,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布惑芭,位于F島的核電站,受9級(jí)特大地震影響继找,放射性物質(zhì)發(fā)生泄漏遂跟。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一婴渡、第九天 我趴在偏房一處隱蔽的房頂上張望幻锁。 院中可真熱鬧,春花似錦边臼、人聲如沸哄尔。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)究飞。三九已至,卻和暖如春堂鲤,著一層夾襖步出監(jiān)牢的瞬間亿傅,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工瘟栖, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留葵擎,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓半哟,卻偏偏與公主長(zhǎng)得像酬滤,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子寓涨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容