js的显示类型转换,隐示类型转换,对象序列化和反序列化

本文深入探讨JavaScript中显式和隐式类型转换的规则,包括常见运算符的行为,如加号、减号和感叹号,并讲解如何使用toString()方法和JSON.stringify()函数将对象序列化为字符串。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

显示类型转换:

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()只能序列化对象可以枚举的自有属性。

对于不能序列化的属性来说,序列化的输出字符串会把这个属性省略掉。

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值