对象什么的,程序员但是有不少呢...程序员
对象,是任何一个开发者都没法绕开和逃避的话题,她彷佛有些深不可测,但如此伟大和巧妙的存在,必定值得你去摸索、发现、征服。正则表达式
咱们都知道,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}'