基本數(shù)據(jù)類型包裝類型
基本數(shù)據(jù)類型:字符串類型 數(shù)據(jù)類型 布爾類型 空類型 未定義類型
通過字面量創(chuàng)建的基本數(shù)據(jù)類型的數(shù)據(jù)都是常量
常量特點:常量是不能被修改的,每次修改或拼接都是生成一個新的
但是可以用字符串方法replace修改
let str =" abc";
let newStr =str.replace("b","m");
基本類型特點:沒有屬性和方法
對象類型的特點:有屬性和方法
以前之所以能夠訪問基本數(shù)據(jù)類型的屬性和方法, 是因為
在運行的時候系統(tǒng)自動將基本數(shù)據(jù)類型包裝成了對象類型
let str = "www.baidu.com"
// let str =new String(str)
常見的基本包裝類型 String() / Number() /J Boolean()
三大對象
在JavaScript中提供三種自帶的對象,分別是"本地對象" "內(nèi)置對象" "宿主對象"
宿主:就是指JavaScript運行環(huán)境,js可以在瀏覽器中運行,也可以在服務(wù)器上運行(nodejs)
本地對象:與宿主無關(guān),無論在瀏覽器還是服務(wù)器中都有的對象,就是ECMAScript標(biāo)準(zhǔn)中定義的類(構(gòu)造函數(shù)),在使用過程中需要我們手動new創(chuàng)建.例如:Boolean、Number耕姊、String教翩、Array、Function茬暇、Object、Date、RegExp等。
內(nèi)置對象:與宿主無關(guān),無論在瀏覽器還是服務(wù)器中都有的對象,ECMAScript已經(jīng)幫我們創(chuàng)建好的對象. 在使用過程中無需我們手動new創(chuàng)建.例如:Global篓冲、Math、JSON
宿主對象:對于嵌入到網(wǎng)頁中的JS來說,起宿主對象就是瀏覽器,所以宿主對象就是瀏覽器提供的對象,包含:Window和Document等.所有的DOM和BOM對象都屬于宿主對象
自定義對象:我們自己編寫的類創(chuàng)建的對象
Math內(nèi)置對象
Math.floor() 向下取整 // 直接砍掉所有的小數(shù)位就是向下取整
let num = 3.9;
let value = Math.floor(num);
console.log(value); //3
Math.ceil() 向上取整 // 只要有小數(shù)位就會給整數(shù)位+1, 然后砍掉所有小數(shù)位
let num = 3.9;
let value = Math.ceil(num);
console.log(value); //4
Math.round() 四舍五入 // 和小學(xué)數(shù)學(xué)一樣, 如果小數(shù)位滿5就會進1
let num = 3.5;
let value = Math.round(num);
console.log(value);//4
Math.abs() 絕對值 // 和小學(xué)數(shù)學(xué)一樣, 統(tǒng)一變?yōu)檎龜?shù)
let num = -3;
let value = Math.abs(num);
console.log(value); // 3
Math.random() 生成隨機數(shù) // 會生成一個0~1的隨機數(shù), 但是不包括1
let value = Math.random();
console.log(value);
需求: 要求生成一個1~10的隨機數(shù)
function getRandomIntInclusive(min,max) {
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(Math.random() * (max - min + 1)) + min; //含最大值 最小值
}
let value = getRandomIntInclusive(1,10);// MDN文檔
console.log(value);
JSON
JSON 格式(JavaScript Object Notation 的縮寫)是一種用于數(shù)據(jù)交換的文本格式宠哄,2001年由 Douglas Crockford 提出壹将,目的是取代繁瑣笨重的 XML 格式。
JSON 對值的類型和格式有嚴(yán)格的規(guī)定毛嫉。
- 復(fù)合類型的值只能是數(shù)組或?qū)ο蟛t恰,不能是函?shù)、正則表達式對象狱庇、日期對象惊畏。
- 簡單類型的值只有四種:字符串、數(shù)值(必須以十進制表示)密任、布爾值和null(不能使用NaN, Infinity, -Infinity和undefined)颜启。
- 字符串必須使用雙引號表示,不能使用單引號浪讳。
- 對象的鍵名必須放在雙引號里面缰盏。
- 數(shù)組或?qū)ο笞詈笠粋€成員的后面,不能加逗號淹遵。
以下是合格的 JSON 值口猜。
["one", "two", "three"]
{ "one": 1, "two": 2, "three": 3 }
{"names": ["張三", "李四"] }
[ { "name": "張三"}, {"name": "李四"} ]
以下是不合格的 JSON 值。
{ name: "張三", 'age': 32 } // 屬性名必須使用雙引號
[32, 64, 128, 0xFFF] // 不能使用十六進制值
{ "name": "張三", "age": undefined } // 不能使用undefined
{ "name": "張三",
"birthday": new Date('Fri, 26 Aug 2011 07:13:10 GMT'),
"getName": function() {
return this.name;
}
} // 不能使用函數(shù)和日期對象
需要注意的是透揣,空數(shù)組和空對象都是合格的 JSON 值济炎,null本身也是一個合格的 JSON 值。
ES5 新增了JSON對象辐真,用來處理 JSON 格式數(shù)據(jù)须尚。它有兩個方法:JSON.stringify()和JSON.parse()
基本用法
JSON.stringify方法用于將一個值轉(zhuǎn)為字符串。該字符串符合 JSON 格式侍咱,并且可以被JSON.parse方法還原耐床。
JSON.stringify('abc') // ""abc""
JSON.stringify(1) // "1"
JSON.stringify(false) // "false"
JSON.stringify([]) // "[]"
JSON.stringify({}) // "{}"
JSON.stringify([1, "false", false])
// '[1,"false",false]'
JSON.stringify({ name: "張三" })
// '{"name":"張三"}'
上面代碼將各種類型的值,轉(zhuǎn)成 JSON 字符串楔脯。
需要注意的是撩轰,對于原始類型的字符串,轉(zhuǎn)換結(jié)果會帶雙引號昧廷。
JSON.stringify('foo') === "foo" // false
JSON.stringify('foo') === "\"foo\"" // true
上面代碼中堪嫂,字符串foo,被轉(zhuǎn)成了""foo""麸粮。這是因為將來還原的時候溉苛,雙引號可以讓 JavaScript 引擎知道,foo是一個字符串弄诲,而不是一個變量名愚战。
如果原始對象中,有一個成員的值是undefined齐遵、函數(shù)或 XML 對象寂玲,這個成員會被過濾。
var obj = {
a: undefined,
b: function () {}
};
JSON.stringify(obj) // "{}"
上面代碼中梗摇,對象obj的a屬性是undefined拓哟,而b屬性是一個函數(shù),結(jié)果都被JSON.stringify過濾伶授。
如果數(shù)組的成員是undefined断序、函數(shù)或 XML 對象流纹,則這些值被轉(zhuǎn)成null。
var arr = [undefined, function () {}];
JSON.stringify(arr) // "[null,null]"
上面代碼中违诗,數(shù)組arr的成員是undefined和函數(shù)漱凝,它們都被轉(zhuǎn)成了null。
正則對象會被轉(zhuǎn)成空對象诸迟。
JSON.stringify(/foo/) // "{}"
JSON.stringify方法會忽略對象的不可遍歷屬性茸炒。
JSON.parse()
JSON.parse方法用于將JSON字符串轉(zhuǎn)化成對象。
JSON.parse('{}') // {}
JSON.parse('true') // true
JSON.parse('"foo"') // "foo"
JSON.parse('[1, 5, "false"]') // [1, 5, "false"]
JSON.parse('null') // null
var o = JSON.parse('{"name": "張三"}');
o.name // 張三
如果傳入的字符串不是有效的JSON格式阵苇,JSON.parse方法將報錯壁公。
JSON.parse("'String'") // illegal single quotes
// SyntaxError: Unexpected token ILLEGAL
上面代碼中,雙引號字符串中是一個單引號字符串绅项,因為單引號字符串不符合JSON格式紊册,所以報錯。
深拷貝的另一種寫法
var obj = {
name: 'hunger',
age: 3,
friends: ['aa', 'bb', 'cc']
}
var obj2 = JSON.parse(JSON.stringify(obj))
obj.age = 4
console.log(obj2.age)