显示类型转换:
1、最常见的是,可以调用全局对象的构造函数进行显示的类型转换,比如Boolean()把它转换为布尔型;(当不用new运算符去调用这些函数的时候,他们会作为类型转换函数使用,用new创建的的话是一个包装对象)
Number(“3”) // => 3
String("2") // => "2"
Boolean("undefine") // => false(转换结果按照以下表来进行)
Object(“3”)// => new Number(3)(创建了一个3的数字包装对象)
2、如果要转换成字符串的话,可以调用object原始对象的toString()方法。
所有的对象,包括包装对象(所以一些原始数据类型可以使用这个方法,除了undefined和null)都继承了这个方法。
如果我们试图把null和undefined转化包装对象的时候,他会返回一个类型错误(typeerror)。但如果Object函数进行操作的时候,不会产生异常,仅仅会返回一个新创建的空对象。
3:上面是显示的类型转换,接下来再看看隐示的。
“+”运算符:如果+号的一个操作数是字符串,那他会把另外一个一个也转换为 字符串。
比如var z = “8”+5//最后打印出来的结果是“85”
“-”运算符:同理,如果是减号,有其中一个是数字的话(甚至两个都是数字的字符串也是可以的)
比如 var z =2-"3”//结果是-1
如果“2”-“3”,结果也是-1
但如果是“2”-“c”,返回的结果会是NaN,非数字字符
“!”运算符:表示转化成布尔值并取反。
比如!f相当于就是false了;
-----------------------------------------------------------
再讲下除了上面的一些常见用法:
var x=x+“”;把x变成字符串类型。等价于String(x)
var x="3",前提是数字类型的字符串,不然结果会返回NaN;
x=x-0;等价于Number(x)
var x==!!x;等价于Boolean(x)(记住,是两个!!,因为!用了有取反的意思)
序列化对象:
含义:就是把对象的值转换为字符串,当然也可以反序列化,把字符串还原为对象。
ES5提供了内置函数JSON.stringify()来序列化,JSON.parse()(其中parse的意思就是语句分析)来还原js对象。
JSON的简称是javascript object notation.也就是js的对象表示法。
o={x:1,y:{z[1,2,3,""]} };//定义一个对象
s=JSON.stringify(o);//把o给实现序列化
//s的值是'{"x":1,"y":{"z":[1,2,3,""]}}'(就是把所有的元素都变成了键值对
p=JSON.parse(s);//p是s反序列化的结果,且是o的深拷贝
JSON的语法是js语法的子集,它并不能表示js中的所有值。
支持对象,数组,字符串,无穷大数字,true,false和null,可以把他们序列化和反序列话。
NaNh和无穷序列化的结果是null,日期序列化的结果是ISO格式的日期字符串。
ISO格式:https://blog.youkuaiyun.com/zmken497300/article/details/73480226;
但日期的JSON.parse()依然保留他们的字符串对象,而不会还原为原始的日期对象。
而函数、RegExp、Error对象和undefined值不能序列化和反序列化。
JSON.stringify()只能序列化对象可以枚举的自有属性。
对于不能序列化的属性来说,序列化的输出字符串会把这个属性省略掉。