數(shù)據(jù)類型
JavaScript一共有8種數(shù)據(jù)類型,其中有7種基本數(shù)據(jù)類型:Undefined会前、Null好乐、Boolean、Number瓦宜、String蔚万、Symbol(es6新增,表示獨(dú)一無二的值)和BigInt(es10新增)临庇。
1種引用數(shù)據(jù)類型——Object(Object本質(zhì)上是由一組無序的名值對(duì)組成的)反璃。里面包含 function、Array苔巨、Date等版扩。JavaScript不支持任何創(chuàng)建自定義類型的機(jī)制,而所有值最終都將是上述 8 種數(shù)據(jù)類型之一侄泽。
原始數(shù)據(jù)類型:直接存儲(chǔ)在棧(stack)中礁芦,占據(jù)空間小、大小固定悼尾,屬于被頻繁使用數(shù)據(jù)柿扣,所以放入棧中存儲(chǔ)。
引用數(shù)據(jù)類型:同時(shí)存儲(chǔ)在棧(stack)和堆(heap)中闺魏,占據(jù)空間大未状、大小不固定。引用數(shù)據(jù)類型在棧中存儲(chǔ)了指針析桥,該指針指向堆中該實(shí)體的起始地址司草。當(dāng)解釋器尋找引用值時(shí),會(huì)首先檢索其在棧中的地址泡仗,取得地址后從堆中獲得實(shí)體埋虹。
判斷類型
- typeof 于原始類型來說,除了 null (object)都可以顯示正確的類型娩怎。
- instanceof 判斷對(duì)象的類型 (原理: 內(nèi)部機(jī)制是通過判斷對(duì)象的原型鏈中是不是能找到類型的 prototype)搔课。
- constructor
console.log((2).constructor === Number); // true
console.log((true).constructor === Boolean); // true
console.log(('str').constructor === String); // true
console.log(([]).constructor === Array); // true
console.log((function() {}).constructor === Function); // true
console.log(({}).constructor === Object); // true
注意!如果我創(chuàng)建一個(gè)對(duì)象截亦,更改它的原型爬泥,constructor隨之變化
function Fn(){};
Fn.prototype=new Array();
var f=new Fn();
console.log(f.constructor===Fn); // false
console.log(f.constructor===Array); // true
字符串
es6: 字符串對(duì)象就新增了 .includes() 和 .repeat() 方法柬讨。
.includes()
替代以往判斷內(nèi)容 > -1 的方式
const string = 'food';
const substring = 'foo';
console.log(string.includes(substring)); // true
console.log(string.indexOf(substring) > -1);
substring()
用于提取字符串中介于兩個(gè)指定下標(biāo)之間的字符
stringObject.substring(start,stop)
// start 必填, stop: 選填
var str="Hello world!"
document.write(str.substring(3)) // lo world!
.repeat()
實(shí)現(xiàn)重復(fù)字符
'meow'.repeat(3); // 'meowmeowmeow'
match()
方法可在字符串內(nèi)檢索指定的值袍啡,或找到一個(gè)或多個(gè)正則表達(dá)式的匹配踩官。
該方法類似 indexOf() 和 lastIndexOf(),但是它返回指定的值葬馋,而不是字符串的位置卖鲤。
語法
stringObject.match(searchvalue)
stringObject.match(regexp)
match() 方法將檢索字符串 stringObject,以找到一個(gè)或多個(gè)與 regexp 匹配的文本畴嘶。這個(gè)方法的行為在很大程度上有賴于 regexp 是否具有標(biāo)志 g。
如果 regexp 沒有標(biāo)志 g集晚,那么 match() 方法就只能在 stringObject 中執(zhí)行一次匹配窗悯。如果沒有找到任何匹配的文本, match() 將返回 null偷拔。否則蒋院,它將返回一個(gè)數(shù)組,其中存放了與它找到的匹配文本有關(guān)的信息莲绰。該數(shù)組的第 0 個(gè)元素存放的是匹配文本欺旧,而其余的元素存放的是與正則表達(dá)式的子表達(dá)式匹配的文本。除了這些常規(guī)的數(shù)組元素之外蛤签,返回的數(shù)組還含有兩個(gè)對(duì)象屬性辞友。index 屬性聲明的是匹配文本的起始字符在 stringObject 中的位置,input 屬性聲明的是對(duì) stringObject 的引用震肮。
如果 regexp 具有標(biāo)志 g称龙,則 match() 方法將執(zhí)行全局檢索,找到 stringObject 中的所有匹配子字符串戳晌。若沒有找到任何匹配的子串鲫尊,則返回 null。如果找到了一個(gè)或多個(gè)匹配子串沦偎,則返回一個(gè)數(shù)組疫向。不過全局匹配返回的數(shù)組的內(nèi)容與前者大不相同,它的數(shù)組元素中存放的是 stringObject 中所有的匹配子串豪嚎,而且也沒有 index 屬性或 input 屬性搔驼。
示例:
var str="Hello world!"
document.write(str.match("world") + "<br />")
document.write(str.match("World1") + "<br />")
// world
// null
var str="1 plus 2 equal 3"
document.write(str.match(/\d+/g))
// 1,2,3
substr()
方法可在字符串中抽取從 start 下標(biāo)開始的指定數(shù)目的字符。
stringObject.substr(start,length)
length 可選
var str="Hello world!"
document.write(str.substr(3)
// lo world!
document.write(str.substr(3,7)) 7:子串中的字符數(shù)疙渣。
//lo worl
eval()
可計(jì)算某個(gè)字符串,并執(zhí)行其中的的 JavaScript 代碼匙奴。
eval("x=10;y=20;document.write(x*y)")
document.write(eval("2+2"))
var x=10
document.write(eval(x+17))
200
4
27
trim()
去除字符串的頭尾空格
不會(huì)改變?cè)甲址?/p>
toString()
方法可把一個(gè)邏輯值轉(zhuǎn)換為字符串,并返回結(jié)果妄荔。
object
Object.keys()
定義:
ES5 引入了Object.keys方法泼菌,成員是參數(shù)對(duì)象自身的(不含繼承的)所有可遍歷( enumerable )屬性的鍵名谍肤。
- 傳入對(duì)象,返回屬性名
var data={a:1,b:2,c:9,d:4,e:5};
console.log(Object.keys(data));//["a", "b", "c", "d", "e"]
Object.keys(data).map((key,item)=>{
console.log(key,data[key]);//key=>屬性名 data[key]=>屬性值
});
- 傳入字符串哗伯,返回索引
var str = 'ab1234';
console.log(Object.keys(obj)); //[0,1,2,3,4,5]
- 傳入數(shù)組 返回索引
var arr = ["a", "b", "c"];
console.log(Object.keys(arr)); // console: ["0", "1", "2"]****
- 構(gòu)造函數(shù) 返回空數(shù)組或者屬性名
function Pasta(name, age, gender) {
this.name = name;
this.age = age;
this.gender = gender;
this.toString = function () {
return (this.name + ", " + this.age + ", " + this.gender);
}
}
console.log(Object.keys(Pasta)); //console: []
var spaghetti = new Pasta("Tom", 20, "male");
console.log(Object.keys(spaghetti)); //console: ["name", "age", "gender", "toString"]
Object.values()
Object.values方法返回一個(gè)數(shù)組荒揣,成員是參數(shù)對(duì)象自身的(不含繼承的)所有可遍歷( enumerable )屬性的鍵值。
Object.entries()
Object.entries方法返回一個(gè)數(shù)組焊刹,成員是參數(shù)對(duì)象自身的(不含繼承的)所有可遍歷( enumerable )屬性的鍵值對(duì)數(shù)組系任。
json
JSON.stringify()
JSON 的常規(guī)用途是同 web 服務(wù)器進(jìn)行數(shù)據(jù)交換。
在向 web 服務(wù)器發(fā)送數(shù)據(jù)時(shí)虐块,數(shù)據(jù)必須是字符串俩滥。
通過 JSON.stringify() 把 JavaScript 對(duì)象轉(zhuǎn)換為字符串
JSON.parse()
JSON.parse() 方法用于將一個(gè) JSON 字符串轉(zhuǎn)換為對(duì)象
Number
toFixed()
方法可把 Number 四舍五入為指定小數(shù)位數(shù)的數(shù)字
var num = new Number(13.37);
num.toFixed(1) 一位小數(shù) 13.4
Number.isInteger()
方法用來判斷給定的參數(shù)是否為整數(shù)。
floor()
方法返回小于等于x的最大整數(shù)
Date
toUTCString() 方法
可根據(jù)世界時(shí) (UTC) 把 Date 對(duì)象轉(zhuǎn)換為字符串贺奠,并返回結(jié)果
var d = new Date()
document.write (d.toUTCString())
// Tue, 19 May 2020 09:06:44 GMT