浅谈JavaScript 标准对象
在JavaScript的世界里,一切都是对象。
但是某些对象还是和其他对象不太一样。为了区分对象的类型,我们用
typeof123;//'number' typeofNaN;//'number' typeof'str';//'string' typeoftrue;//'boolean' typeofundefined;//'undefined' typeofMath.abs;//'function' typeofnull;//'object' typeof[];//'object' typeof{};//'object'
可见,
包装对象
varn=newNumber(123);//123,生成了新的包装类型 varb=newBoolean(true);//true,生成了新的包装类型 vars=newString('str');//'str',生成了新的包装类型
虽然包装对象看上去和原来的值一模一样,显示出来也是一模一样,但他们的类型已经变为
typeofnewNumber(123);//'object' newNumber(123)===123;//false typeofnewBoolean(true);//'object' newBoolean(true)===true;//false typeofnewString('str');//'object' newString('str')==='str';//false
所以闲的蛋疼也不要使用包装对象!尤其是针对string类型!!!
Date
在JavaScript中,
要获取系统当前时间,用:
varnow=newDate(); now;//WedJun24201519:49:22GMT+0800(CST) now.getFullYear();//2015,年份 now.getMonth();//5,月份,注意月份范围是0~11,5表示六月 now.getDate();//24,表示24号 now.getDay();//3,表示星期三 now.getHours();//19,24小时制 now.getMinutes();//49,分钟 now.getSeconds();//22,秒 now.getMilliseconds();//875,毫秒数 now.getTime();//1435146562875,以number形式表示的时间戳
注意,当前时间是浏览器从本机操作系统获取的时间,所以不一定准确,因为用户可以把当前时间设定为任何值。
如果要创建一个指定日期和时间的
vard=newDate(2015,5,19,20,15,30,123);
你可能观察到了一个非常非常坑爹的地方,就是JavaScript的月份范围用整数表示是0~11,0表示一月,1表示二月……,所以要表示6月,我们传入的是5!这绝对是JavaScript的设计者当时脑抽了一下,但是现在要修复已经不可能了。
第二种创建一个指定日期和时间的方法是解析一个符合ISO8601格式的字符串:
vard=Date.parse('2015-06-24T19:49:22.875+08:00'); d;//1435146562875
但它返回的不是
vard=newDate(1435146562875); d;//WedJun24201519:49:22GMT+0800(CST)
vard=newDate(1435146562875); d.toLocaleString();//'2015/6/24下午7:49:22',本地时间(北京时区+8:00),显示的字符串与操作系统设定的格式有关 d.toUTCString();//'Wed,24Jun201511:49:22GMT',UTC时间,与本地时间相差8小时
那么在JavaScript中如何进行时区转换呢?实际上,只要我们传递的是一个
所以,我们只需要传递时间戳,或者把时间戳从数据库里读出来,再让JavaScript自动转换为当地时间就可以了。
要获取当前时间戳,可以用:
if(Date.now){ alert(Date.now());//老版本IE没有now()方法 }else{ alert(newDate().getTime()); }
JSON
在JSON中,一共就这么几种数据类型:
•number:和JavaScript的number完全一致;
•boolean:就是JavaScript的true或false;
•string:就是JavaScript的string;
•null:就是JavaScript的null;
•array:就是JavaScript的Array表示方式——[];
•object:就是JavaScript的{...}表示方式。
以及上面的任意组合。
序列化
让我们先把小明这个对象序列化成JSON格式的字符串:
varxiaoming={ name:'小明', age:14, gender:true, height:1.65, grade:null, 'middle-school':'\"W3C\"MiddleSchool', skills:['JavaScript','Java','Python','Lisp'] };
JSON.stringify(xiaoming);//'{"name":"小明","age":14,"gender":true,"height":1.65,"grade":null,"middle-school":"\"W3C\"MiddleSchool","skills":["JavaScript","Java","Python","Lisp"]}'
要输出得好看一些,可以加上参数,按缩进输出:
JSON.stringify(xiaoming,null,'');
结果:
{ "name":"小明", "age":14, "gender":true, "height":1.65, "grade":null, "middle-school":"\"W3C\"MiddleSchool", "skills":["JavaScript","Java","Python","Lisp" ] }
第二个参数用于控制如何筛选对象的键值,如果我们只想输出指定的属性,可以传入
JSON.stringify(xiaoming,['name','skills'],'');
结果:
{ "name":"小明", "skills":["JavaScript","Java","Python","Lisp" ] }
还可以传入一个函数,这样对象的每个键值对都会被函数先处理:
functionconvert(key,value){ if(typeofvalue==='string'){ returnvalue.toUpperCase(); } returnvalue; } JSON.stringify(xiaoming,convert,'');
上面的代码把所有属性值都变成大写:
{ "name":"小明", "age":14, "gender":true, "height":1.65, "grade":null, "middle-school":"\"W3C\"MIDDLESCHOOL", "skills":["JAVASCRIPT","JAVA","PYTHON","LISP" ] }
如果我们还想要精确控制如何序列化小明,可以给
varxiaoming={ name:'小明', age:14, gender:true, height:1.65, grade:null,'middle-school':'\"W3C\"MiddleSchool', skills:['JavaScript','Java','Python','Lisp'], toJSON:function(){ return{//只输出name和age,并且改变了key: 'Name':this.name,'Age':this.age }; } }; JSON.stringify(xiaoming);//'{"Name":"小明","Age":14}'
反序列化
拿到一个JSON格式的字符串,我们直接用
JSON.parse('[1,2,3,true]');//[1,2,3,true] JSON.parse('{"name":"小明","age":14}');//Object{name:'小明',age:14} JSON.parse('true');//true JSON.parse('123.45');//123.45
JSON.parse('{"name":"小明","age":14}',function(key,value){ //把number*2: if(key==='name'){ returnvalue+'同学'; } returnvalue; });//Object{name:'小明同学',age:14}
以上这篇浅谈JavaScript标准对象就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。