對象什麼的,程序員但是有不少呢...程序員
對象,是任何一個開發者都沒法繞開和逃避的話題,她彷佛有些深不可測,但如此偉大和巧妙的存在,必定值得你去摸索、發現、征服。正則表達式
咱們都知道,JavaScript有3大對象,分別是本地對象
、內置對象
和宿主對象
。json
在此引用ECMA-262(ECMAScript的制定標準)對於他們的定義:數組
本地對象瀏覽器
Object
、Array
、Date
、RegExp
、Function
、Boolean
、Number
、String
等。內置對象dom
Global
和Math
。JSON
這個存在於全局的內置對象。宿主對象函數
Window
和Document
等。DOM
和BOM
對象都屬於宿主對象。關於專業名詞:本地對象也常常被叫作原生對象或內部對象,包含Global和Math在內的內置對象在《JavaScript高級程序設計》裏也被叫作單體內置對象,不少時候,乾脆也會直接把本地對象和內置對象統稱爲「內置對象」,也就是說除了宿主對象,剩下的都是ECMAScript的內部的「內置」對象。測試
聲明:本文也將採起這種統稱爲「內置對象」的方式,好比文章標題。this
constructor
prototype編碼
一、toString()
功能:返回當前對象的字符串形式,返回值爲String類型。
示例:
[1,'2',true].toString(); //"1,2,true" (new Date()).toString(); //"Sun Sep 24 2017 14:52:20 GMT+0800 (CST)" ({name:'ryan'}).toString(); //"[object Object]"
該方法屬於Object對象,因爲全部的對象都"繼承"了Object的對象實例,所以幾乎全部的實例對象均可以使用該方法。
JavaScript的許多內置對象都重寫了該函數,以實現更適合自身的功能須要。
二、toLocaleString
功能:返回當前對象的"本地化"字符串形式,以便於當前環境的用戶辨識和使用,返回值爲String類型。
示例:
(1234567).toLocaleString(); //"1,234,567" (6.37588).toLocaleString(); //"6.376" (new Date()).toLocaleString(); //"2017/9/24 下午2:58:21"
三、valueOf()
功能:返回指定對象的原始值。
JavaScript的許多內置對象都重寫了該函數,以實現更適合自身的功能須要。所以,不一樣類型對象的valueOf()方法的返回值和返回值類型都可能不一樣。
一、Object.assign(target, ...sources)
功能:把一個或多個源對象的可枚舉、自有屬性值複製到目標對象中,返回值爲目標對象。
參數:
示例:
var target = { a:1 }; var source1 = { b:2 }; var source2 = { c:function(){ console.log('c'); } }; Object.assign(target,source1,source2); console.log(target); //{a: 1, b: 2, c: ƒ}
拓展:自定義實現一個assign方法
//自定義一個assign方法 function copy(target){ if(target == null){ throwError('出錯:Cannot convert undefined or null to object'); } var target = new Object(target); for(var i = 1;i < arguments.length;i ++){ var source = arguments[i]; for(var key in source){ if(source.hasOwnProperty(key)){ //若當前屬性爲源對象自有屬性,則拷貝至目標對象 target[key] = source[key]; } } } return target; }
二、Object.create(proto [,propertiesObject])
功能:建立一個對象,其原型爲prototype,同時可添加多個屬性。
參數:
propertiesObject參數詳解:
數據屬性
訪問屬性
示例:
function Person(name){ this.name = name; } Person.prototype.say = function(){console.log('my name is ' + this.name +',my age is ' + this.age);} var person = new Person('ryan'); var p = Object.create(person,{ age:{ value: 23, writable: true, configurable: true }, sex:{ configurable: true, get:function(){return sex + '士';}, set:function(value){sex = value;} } }); p.sex = '男'; p.say(); //'my name is ryan,my age is 23' console.log(p.sex); //'男士' p.sex = '女'; console.log(p.sex); //'女士'
總結:Object.create(proto [,propertiesObject]) 是E5中提出的一種新的對象建立方式,第一個參數是要繼承的原型,若是不是一個子函數,能夠傳一個null,第二個可選參數是對象的屬性描述符。
三、Object.defineProperty(obj, prop, descriptor)
功能:在一個對象上定義一個新屬性或修改一個現有屬性,並返回該對象。
參數:
示例:
var obj = {}; Object.defineProperty(obj,'name',{ writable: true, configurable: true, enumerable: false, value: '張三' }); console.log(obj.name); //'張三' for(var key in obj){ console.log(obj[key]); //無結果 }
總結:在參數 descriptor中,若是不指定configurable, writable, enumerable ,則這些屬性默認值爲false,若是不指定value, get, set,則這些屬性默認值爲undefined。
四、Object.defineProperties(obj, props)
功能:在一個對象上定義一個或多個新屬性或修改現有屬性,並返回該對象。
參數:
示例:
var obj = {}; Object.defineProperties(obj,{ name:{ writable: true, configurable: true, enumerable: false, value: '張三' }, age:{ writable: true, configurable: true, enumerable: true, value: 23 } }); console.log(obj.name); //'張三' console.log(obj.age); //23 for(var key in obj){ console.log(obj[key]); //23 }
五、Object.seal(obj) / Object.isSealed(obj)
功能:密封對象,阻止其修改現有屬性的配置特性,即將對象的全部屬性的configurable特性設置爲false(也就是所有屬性都沒法從新配置,惟獨能夠把writable的值由true改成false,即凍結屬性),並阻止添加新屬性,返回該對象。
參數:
示例:
var obj = {name:'張三'}; Object.seal(obj); console.log(Object.isSealed(obj)); //true obj.name = '李四'; //修改值成功 console.log(obj.name); //'李四' obj.age = 23; //沒法添加新屬性 console.log(obj.age); //undefined Object.defineProperty(obj,'name',{ writable: true, configurable: true, enumerable: true }); //報錯:Cannot redefine property: name
補充:Object.isSealed(obj)用於判斷目標對象是否被密封,返回布爾值。
將一個對象密封后僅能保證該對象不被擴展且所有屬性不可重配置,可是原屬性值倒是能夠被修改的。
六、Object.freeze(obj) / Object.isFrozen(obj)
功能:徹底凍結對象,在seal的基礎上,屬性值也不能夠修改,即每一個屬性的wirtable也被設爲false。
參數:
示例:
var obj = {name:'張三'}; Object.freeze(obj); console.log(Object.isFrozen(obj)); //true obj.name = '李四'; //修改值失敗 console.log(obj.name); //'張三' obj.age = 23; //沒法添加新屬性 console.log(obj.age); //undefined Object.defineProperty(obj,'name',{ writable: true, configurable: true, enumerable: true }); //報錯:Cannot redefine property: name
補充:Object.isFrozen(obj)用於判斷目標對象是否被凍結,返回布爾值。
七、getOwnPropertyDescriptor(obj, prop)
功能:獲取目標對象上某自有屬性的配置特性(屬性描述符),返回值爲配置對象。
參數:
示例:
var obj = {}; Object.defineProperty(obj,'name',{ writable: true, configurable: false, enumerable: true, value: '張三' }); var prop = Object.getOwnPropertyDescriptor(obj,'name'); console.log(prop); //{value: "張三", writable: true, enumerable: true, configurable: false}
八、Object.getOwnPropertyNames(obj)
功能:獲取目標對象上的所有自有屬性名(包括不可枚舉屬性)組成的數組。
參數:
示例:
var obj = {}; obj.say = function(){}; Object.defineProperties(obj,{ name:{ writable: true, configurable: true, enumerable: true, value: '張三' }, age:{ writable: true, configurable: true, enumerable: false, value: 23 } }); var arr = Object.getOwnPropertyNames(obj); console.log(arr); //["say", "name", "age"]
九、Object.getPrototypeOf(obj)
功能:獲取指定對象的原型,即目標對象的prototype屬性的值。
參數:
示例:
function Person(name){ this.name = name; } var person = new Person('張三'); var p = Object.create(person); //對象p的原型爲person console.log(p); //Person {} var __ptoto__ = Object.getPrototypeOf(p); console.log(__ptoto__); //Person {name: "張三"}
十、Object.setPrototypeOf(obj, proto)
功能:設置目標對象的原型爲另外一個對象或null,返回該目標對象。
參數:
示例:
var obj = {a:1}; var proto = {}; Object.setPrototypeOf(obj,proto); //設置obj對象的原型 proto.b = 2; //爲該原型對象添加屬性 proto.c = 3; console.log(obj.a); //1 console.log(obj.b); //2 console.log(obj.c); //3
解析:上述代碼將proto對象設爲obj對象的原型,因此從obj對象上能夠順利讀取到proto 對象的屬性,也就是原型鏈上的屬性。
Object.setPrototypeOf()方法的做用與__proto__相同,用來設置當前對象的原型指向的對象(prototype)。它是 ES6 正式推薦的設置原型對象的方法。
十一、Object.keys(obj)
功能:獲取目標對象上全部可枚舉屬性組成的數組。
參數:
示例:
var person = { type:'person', say:function(){} }; //以person對象爲原型,建立obj對象 var obj = Object.create(person,{ sex:{ writable: true, configurable: true, enumerable: false, //設置sex屬性爲不可枚舉 value: 'male' }, age:{ writable: true, configurable: true, enumerable: true, //設置age屬性爲可枚舉 value: 23 } }); obj.name = '張三'; //自定義屬性name默認爲可枚舉 console.log(obj.propertyIsEnumerable('name')); //true,成功驗證name屬性爲可枚舉 //用for-in可獲取obj上所有可枚舉的屬性(包括自有和原型鏈上的) var arr = []; for(var key in obj){ arr.push(key); } console.log(arr); //["age", "name", "type", "say"] //用Object.keys()可獲取obj上所有可枚舉的自有屬性 console.log(Object.keys(obj)); // ["age", "name"]
總結:Object.keys(obj)方法獲取的集合和for-in遍歷獲取的不一樣在於,Object.keys()只獲取目標對象上可枚舉的自有屬性,而for-in遍歷會包含原型鏈上可枚舉屬性一併獲取。
Object.keys()和Object.getOwnPropertyNames()的相同之處都是獲取目標對象的自有屬性,區別在於,後者會連同不可枚舉的自有屬性也一併獲取組成數組並返回。
十二、Object.preventExtensions(obj) / Object.isExtensible(obj)
功能:使某一對象不可擴展,也就是不能爲其添加新屬性。
參數:
補充:Object.isExtensible(obj)方法用於判斷一個對象是否可擴展,便是否能夠添加新屬性。
示例:
var obj = { name: '張三' }; Object.preventExtensions(obj); //阻止obj的可擴展性 console.log(Object.isExtensible(obj)); //false,代表obj對象爲不可擴展,即阻止成功 obj.age = 23; //默認添加失敗 console.log(obj.age); //undefined
一、length
設置或返回數組中元素的數目。
設置 length 屬性可改變數組的大小。若是設置的值比其當前值小,數組將被截斷,其尾部的元素將丟失。若是設置的值比它的當前值大,數組將增大,新的元素被添加到數組的尾部,它們的值爲 undefined。
二、constructor
返回對建立此對象的數組函數的引用。
三、prototype
使您有能力向對象添加屬性和方法。
一、concat()
二、join()
三、push()
四、pop()
五、shift()
六、unshift()
七、reverse()
八、sort()
若是想按照其餘標準進行排序,就須要提供比較函數,該函數要比較兩個值,而後返回一個用於說明這兩個值的相對順序的數字。比較函數應該具備兩個參數 a 和 b,其返回值以下:
九、slice(start [,end])
十、splice(index,howmany [,item1,item2...])
map():返回一個新的Array,每一個元素爲調用func的結果
filter():返回一個符合func條件的元素數組
some():返回一個boolean,判斷是否有元素是否符合func條件
every():返回一個boolean,判斷每一個元素是否符合func條件
forEach():沒有返回值,只是針對每一個元素調用func
reduce():reduce方法有兩個參數,第一個參數是一個callback,用於針對數組項的操做;第二個參數則是傳入的初始值,這個初始值用於單個數組項的操做。須要注意的是,reduce方法返回值並非數組,而是形如初始值的通過疊加處理後的操做。
Date對象:封裝一個時間點,提供操做時間的API。Date對象中封裝的是從1970年1月1日0點至今的毫秒數。
建立Date對象4種方式
var now = new Date(); //獲取客戶端的當前系統時間 var date - new Date("1994/02/04 03:23:55"); //建立自定義時間 var date = new Date(yyyy, MM, dd, hh, mm, ss); //建立自定義時間 var oldDate = new Date("1994/02/04"); var newDate = new Date(oldDate); //複製一個時間對象
日期API
日期份量:FullYear、Month、Date、Day、Hours、Minutes、Seconds、Milliseconds。
每個日期份量都有一個get
和set
方法(除了Day沒有set方法),分別用於獲取和設置時間對象。
日期的單位及範圍:
年FullYear (無範圍)
月Month (0~11, 0開始,沒有12)
日Date (1~31, 和現實生活同樣)
星期Day (0~6, 0是星期日,沒有7)
時Hours (0~23. 0開始,沒有24)
分Minutes (0~59)
秒Seconds (0~59)
毫秒MilliSeconds
一、global
二、ignoreCase
三、lastIndex
不具備標誌 g 和不表示全局模式的 RegExp 對象不能使用 lastIndex 屬性。
一、compile()
二、exec()
三、test()
注意:支持正則表達式的 String 對象的方法有:search()、match()、replace()和split()。
一、arguments
Javascrip中每一個函數都會有一個Arguments對象實例arguments,它引用着函數的實參,能夠用數組下標的方式"[]"引用每一個實際傳入的參數。
示例:
function say(a,b,c){ console.log(arguments.length); //2 console.log(arguments[0],arguments[1]); //hello world } say('hello','world');
一、toString()
經常使用方法:
一、toString()
註釋:在 Boolean 對象被用於字符串環境中時,此方法會被自動調用。
二、valueOf()
經常使用方法:
一、toString()
功能:將Number數值轉換爲字符串,該方法接受一個可選參數基數,若省略該參數,則默認基數爲10,即十進制。
var num = 10; console.log(num.toString(2)); //1010
二、toLocaleString()
功能:把一個 Number 對象轉換爲本地格式的字符串。
三、valueOf()
功能:返回一個 Number 對象的基本數字值。
valueOf() 方法一般由 JavaScript 在後臺自動進行調用,而不是顯式地處於代碼中。
一、length
功能:String 對象的 length 屬性聲明瞭該字符串中的字符數。
一、charAt()
若參數 index 不在 0 與 string.length 之間,該方法將返回一個空字符串。
二、charCodeAt()
若參數 index 不在 0 與 string.length 之間,該方法將返回NaN。
三、indexOf()
注意:indexOf() 方法對大小寫敏感!
注意:若是要檢索的字符串值沒有出現,則該方法返回 -1。
四、lastIndexOf()
五、match()
若是 regexp 沒有標誌 g,那麼 match() 方法就只能在 stringObject 中執行一次匹配。若是沒有找到任何匹配的文本, match() 將返回 null。不然,它將返回一個數組,其中存放了與它找到的匹配文本有關的信息。該數組的第 0 個元素存放的是匹配文本,而其他的元素存放的是與正則表達式的子表達式匹配的文本。除了這些常規的數組元素以外,返回的數組還含有兩個對象屬性。index 屬性聲明的是匹配文本的起始字符在 stringObject 中的位置,input 屬性聲明的是對 stringObject 的引用。
若是 regexp 具備標誌 g,則 match() 方法將執行全局檢索,找到 stringObject 中的全部匹配子字符串。若沒有找到任何匹配的子串,則返回 null。若是找到了一個或多個匹配子串,則返回一個數組。不過全局匹配返回的數組的內容與前者大不相同,它的數組元素中存放的是 stringObject 中全部的匹配子串,並且也沒有 index 屬性或 input 屬性。
示例:
var s = 'hello21 world21'; console.log(s.match(/\d{2}/)); //[ '21', index: 5, input: 'hello21 world21' ] var s = 'hello21 world21'; console.log(s.match(/\d{2}/g)); //[ '21', '21' ]
六、replace()
示例:
var s = 'hello world hello'; console.log(s.replace('hello','hi')); //hi world hello console.log(s.replace(/hello/,'hi')); //hi world hello console.log(s.replace(/hello/g,'hi')); //hi world hi
replace方法返回一個新字符串,並不會修改原字符串。
七、search()
示例:
var s = 'hello world hello'; console.log(s.search('hello')); //0 console.log(s.search(/hello/g)); //0 console.log(s.search(/hello2/)); //-1
search()方法不執行全局匹配,它將忽略標誌 g。也就是說,它只匹配一次。若沒匹配到結果,則返回-1。
八、toLowerCase() & toUpperCase()
示例:
var s = 'Hello World'; console.log(s.toLowerCase()); //hello world console.log(s.toUpperCase()); //HELLO WORLD
九、concat()
concat方法不會修改原字符串。
stringObject.concat() 與 Array.concat() 很類似。
一般使用 " + " 運算符來進行字符串的鏈接運算一般會更簡便一些。
示例:
var s1 = 'hello '; var s2 = 'world '; var s3 = '233'; console.log(s1.concat(s2,s3)); //hello world 233
十、split()
示例:
var s = 'hi baby'; console.log(s.split('')); //[ 'h', 'i', ' ', 'b', 'a', 'b', 'y' ] console.log(s.split(' ')); //[ 'hi', 'baby' ] console.log(s.split('b')); //[ 'hi ', 'a', 'y' ]
十一、slice()
注意:String.slice() 與 Array.slice() 類似。
slice方法的兩個參數接受負值,若爲負數,則該參數規定的是從字符串的尾部開始算起的位置。也就是說,-1 指字符串的最後一個字符,-2 指倒數第二個字符,以此類推。
若未指定第二個參數,則默認截取至字符串的末尾。
slice方法不修改原字符串。
示例:
var s = 'hi baby'; console.log(s.slice(3)); //baby console.log(s.slice(1,5)); //i ba console.log(s.slice(-4)); //baby console.log(s.slice(-4,-2)); //ba
十二、substr()
注意:ECMAscript 沒有對該方法進行標準化,所以不建議使用它。
示例:
var s = 'hi baby'; console.log(s.substr(3)); //baby console.log(s.substr(3,2)); //ba console.log(s.substr(-3,2)); //ab
1三、substring()
示例:
var s = 'hi baby'; console.log(s.substring(3)); //baby console.log(s.substring(3,5)); //ba console.log(s.substring(5,3)); //ba console.log(s.substring(3,3)); //''
注意:與 slice() 和 substr() 方法不一樣的是,substring() 不接受負的參數。
若是參數 start 與 stop 相等,那麼該方法返回的一個空串。
若是 start 比 stop 大,那麼該方法在提取子串以前會先交換這兩個參數。
關於全局對象:全局對象只是一個對象,而不是類。既沒有構造函數,也沒法實例化一個新的全局對象。
Infinity
表明正的無窮大的數值。
示例:
console.log(6/0); //Infinity console.log(-6/0); //-Infinity console.log(0/0); //NaN console.log(1.7976931348623157E+10308); //Infinity console.log(-1.7976931348623157E+10308); //-Infinity
Infinity表明了超出JavaScript處理範圍的數值。也就是說JS沒法處理的數值都是Infinity。實踐證實,JS所能處理的最大值是1.7976931348623157e+308,而最小值是5e-324。
NaN
表明非數字的值。
示例:
var a = Number('100'); var b = Number('hello world'); console.log(a); //100 console.log(b); //NaN console.log(isNaN(a)); //false console.log(isNaN(b)); //true
提示:請使用 isNaN() 方法來判斷一個值是不是數字,緣由是 NaN 與全部值都不相等,包括它本身。
Undefined
表明未定義的值。
示例:
var a; var b = ''; var c = null; console.log(a === undefined); //true console.log(b === undefined); //false console.log(c == undefined); //true
提示:判斷一個變量是否未定義,只能用 === undefined 運算來測試,由於 == 運算符會認爲 undefined 值等價於 null,即undefined == null會返回true。
註釋:null 表示無值,而 undefined 表示一個未聲明的變量,或已聲明但沒有賦值的變量,或一個並不存在的對象屬性。
一、encodeURI(URIString)
功能:將字符串做爲URI進行編碼,返回值爲URIstring 的副本。
參數:
示例:
console.log(encodeURI('http://www.baidu.com')); //http://www.baidu.com console.log(encodeURI('http://www.baidu.com/my mind')); //http://www.baidu.com/my%20mind console.log(encodeURI(',/?:@&=+$#')); //,/?:@&=+$#
該方法不會對 ASCII 字母和數字進行編碼,也不會對這些 ASCII 標點符號進行編碼: - _ . ! ~ * ' ( ) 。
該方法的目的是對 URI 進行完整的編碼,所以對如下在 URI 中具備特殊含義的 ASCII 標點符號,encodeURI() 函數是不會進行轉義的:;/?:@&=+$,#
提示:若是 URI 組件中含有分隔符,好比 ? 和 #,則應當使用 encodeURIComponent() 方法分別對各組件進行編碼。
二、encodeURIComponent(URIString)
功能:將字符串做爲URI組件進行編碼,返回值爲URIstring的副本。
該方法不會對 ASCII 字母和數字進行編碼,也不會對這些 ASCII 標點符號進行編碼: - _ . ! ~ * ' ( ) 。
其餘字符(好比 :;/?:@&=+$,# 這些用於分隔 URI 組件的標點符號),都是由一個或多個十六進制的轉義序列替換的。
參數:
示例:
encodeURI和encodeURIComponent的區別:
它們都是編碼URL,惟一區別就是編碼的字符範圍,其中encodeURI方法不會對下列字符編碼 ASCII字母、數字、~!@#$&*()=:/,;?+'
encodeURIComponent方法不會對下列字符編碼 ASCII字母、數字、~!*()'
因此encodeURIComponent比encodeURI編碼的範圍更大。
實際例子來講,encodeURIComponent會把 http:// 編碼成 http%3A%2F%2F 而encodeURI卻不會。
使用場景:
console.log(encodeURI('http://www.baidu.com/home/some other thing')); //編碼後爲:http://www.baidu.com/home/some%20other%20thing; 其中,空格被編碼成了%20 //可是若是你用了encodeURIComponent console.log(encodeURIComponent('http://www.baidu.com/home/some other thing')); //http%3A%2F%2Fwww.baidu.com%2Fhome%2Fsome%20other%20thing 連 "/" 都被編碼了,整個URL已經無法用了
var param = "http://www.baidu.com/home/"; //param爲參數 param = encodeURIComponent(param); var url = "http://www.baidu.com?next=" + param; console.log(url) //'http://www.baidu.com?next=http%3A%2F%2Fwww.baidu.com%2Fhome%2F' //顯然,參數中的 "/" 被編碼了,而若是用encodeURI確定要出問題,由於後面的/是須要編碼的。
補充:相應的,存在decodeURI()和decodeURIComponent是用來解碼的,逆向操做。
三、parseInt(string,radix)
功能:解析一個字符串,並返回一個整數。
參數:
示例:
console.log(parseInt('10')); //10 console.log(parseInt('11',9)); //10 (9+1) console.log(parseInt('11',2)); //3 (2+1) console.log(parseInt('17',8)); //15 (8+7) console.log(parseInt('1f',16)); //31 (16+15) console.log(parseInt('010')); //10 console.log(parseInt('0x0011')); //17
四、parseFloat()
功能:解析一個字符串,並返回一個浮點數。
該函數指定字符串中的首個字符是不是數字。若是是,則對字符串進行解析,直到到達數字的末端爲止。
參數:
示例:
console.log(parseFloat('10')); //10 console.log(parseFloat('10.00')); //10 console.log(parseFloat('10.33')); //10.33 console.log(parseFloat(' 60 ')); //60 首尾的空格會忽略 console.log(parseFloat('23 34 45')); //23 中間的空格不會忽略,會中斷 console.log(parseFloat('23 years')); //23 console.log(parseFloat('i am 23')); //NaN
提示:開頭和結尾的空格是容許的。若是字符串的第一個字符不能被轉換爲數字,那麼 parseFloat() 會返回 NaN。若是隻想解析數字的整數部分,請使用 parseInt() 方法。
五、isFinite(number)
功能:用於檢查其參數是不是無窮大。
參數:
示例:
console.log(isFinite(123)); //true console.log(isFinite(-1.23)); //true console.log(isFinite(5-2)); //true console.log(isFinite(0)); //true console.log(isFinite(0/0)); //false console.log(isFinite('Hello')); //false
六、isNaN(number)
功能:用於檢查其參數是否爲非數字值。
參數:
示例:
console.log(isNaN(123)); //false console.log(isNaN(-1.23)); //false console.log(isNaN(5-2)); //false console.log(isNaN(0)); //false console.log(isNaN(0/0)); //true console.log(isNaN('Hello')); //true
提示:isNaN() 函數一般用於檢測 parseFloat() 和 parseInt() 的結果,以判斷它們表示的是不是合法的數字。固然也能夠用 isNaN() 函數來檢測算數錯誤,好比用 0 做除數的狀況。
七、Number(object)
功能:把對象的值轉換爲數字。
參數:
示例:
console.log(Number(new Boolean(true))); //1 console.log(Number(new Boolean(false))); //0 console.log(Number(new Date())); //1506266494726 console.log(Number(new String('999'))); //999 console.log(Number(new String('999 888'))); //NaN
八、String(object)
功能:把對象的值轉換爲字符串。
參數:
示例:
console.log(String(new Boolean(true))); //'true' console.log(String(new Boolean(false))); //'false' console.log(String(new Date())); //'Sun Sep 24 2017 23:25:43 GMT+0800 (CST)' console.log(String(new String('999'))); //'999' console.log(String(new String('999 888'))); //'999 888' console.log(String(12345)); //'12345'
經常使用方法:
Math.abs(); //取絕對值 Math.ceil(); //向上取整 Math.floor(); //向下取整 Math.round(); //四捨五入取整 Math.random(); //生成0~1間的隨機數(>0) Math.max(x,y); //取x、y中較大的那個 Math.min(x,y); //取x、y中較小的那個
咱們常說的對象字面量其實不是JSON對象,可是有真正的JSON對象。
二者徹底不同概念,在新版的瀏覽器裏JSON對象已經被原生的內置對象了,目前有2個靜態方法:JSON.parse用來將JSON字符串反序列化成對象,JSON.stringify用來將對象序列化成JSON字符串。
老版本的瀏覽器不支持這個對象,但你能夠經過json2.js來實現一樣的功能。
一、JSON.parse()
示例:
var jsonString = '{"name":"ryan"}'; //JSON字符串(好比從AJAX獲取字符串信息) var obj = JSON.parse(jsonString); //將字符串反序列化成對象 console.log(obj); //{ name: 'ryan' } console.log(obj.name == 'ryan'); //true
二、JSON.stringify()
示例:
var obj = {name:'ryan',age:23}; var jsonString = JSON.stringify(obj); console.log(jsonString); //'{"name":"ryan","age":23}'