js中类型转换

js类型

总共有null undefined string boolean number symbol object function 8种类型

基础类型转化

Boolean 方法转化

以下几7种为转化结果为false

Boolean(false)
Boolean( )
Boolean("")
Booelean(0)
Boolean(null)
Boolean(NaN)
Booean(underfined)

Number() 方法转化

不传参数返回0,传参数使用未暴露的toNumber()转化,参数为string类型时,有一个字符不为数字,返回NaN。
支持16进制,忽略先导0
可通过parseInt parseFloat来解析更多,忽略前导0,忽略后导字符,但第一个字符为非数字时返回NaN

Number() //0
Number(null) //0
Number(underfined) //0
Number(true) //1
Number(false) //0
Number(NaN) //NaN
Number("") //0
Number(" ") //0
Number("123") //123
Number("0000123") //123
Number("-123") // -123
Number("0x11") //17
Number("123 ") //123
Number("123 123") //NaN
Number("foo") //NaN
Number("100b") //NaN

String()方法转化

String 不传参数返回空字符串 传递参数使用toString()方法转换,未暴露的

String() // ""
String(null) //"null"
String(undefined) //"underfined"
String(false) //"false"
String(true) //"true"
String(0) //"0"
String(NaN) //"NaN"
String(Infinity) //"Infinity"
String(-Infinity) //"-Infinity"
String(1) //"1"

引用类型转化

基础类型转引用类型

//通过new Boolean、String、Number等转化
//null undefined 用在期望是一个对象的地方都会报类型错误
var a = new Number('5')

引用类型转基础类型

转boolean

//所有对象都是true

转string 或 number
//通过toString valueof方法来进行转换
//除了null 和undefined 所有对象都具有toString方法。
//调用toString方法时 是调用的Object.prototype上的方法。

({}).toString() // [object Object]
([]).toString() //""
[0].toString()//0
[1,2,3].toString()//1,2,3
(function(){var a = 1;}).toString() //function(){var a = 1;}
(/\d+/g).toString() //  /\d+/g
new Date(2010,0,1).toString() // Fri Jan 01 2010 00:00:00 GMT+0800 (CST)

new Date(2013,4,12).valueOf() //1495296000000
//valueof方法返回对象的本身,除了date,date会返回时间戳

转化原理
使用toPrimitive将其转换为基本类型,在调用toString()或toNumber方法。
ToPrimitive(input,number/string)第二个参数表示希望转换的类型不传递第二参数时,
input为date相当于转化为String类型,其他都为Number类型
input 为null undefined boolean string 时,直接返回值

ToPrimitive(obj, Number)
基本类型直接返回,否调用valueof方法,若是原始值直接返回,否则调用tostring方法,若是原始值(基本类型值)直接返回,,否则报错。再进行原始值转字符(对象转字符串)

//ToPrimitive(obj, String)
//基本类型直接返回,否调用tostring方法,若是原始值直接返回,否则调用valueof方法,若是原始值直接返回,否则报错。再进行原始值转字符(对象转字符串)

Json转化

json.stringfy

  • 处理基本类型

处理基本类型时,全是字符串和String()方法一致;除了undefined

JSON.stringify(undefined) //undefined 此undefined非字符串
  • 处理包装对象

数字,布尔值,字符串的包装对象会自动转化为原始值

JSON.stringify([new Number(1), new String("false"), new Boolean(false)]); // "[1,"false",false]"
JSON.stringify({a:undefined,b: Object, c: Symbol("")}) // {}
JSON.stringify([undefined, Object, Symbol("")]) // [null, null, null]
JSON.stringify({a:1,b: {a:1}, c: Symbol("")}) // '{"a":1,"b":{"a":1}}
  • JSON.stringfy有第二个参数

解决序列化过程中哪些被处理,哪些被排除

function replacer(key, value) {
  if (typeof value === "string") {
    return undefined;
  }
  return value;
}
var foo = {foundation: "Mozilla", model: "box", week: 45, transport: "car", month: 7};
var jsonString = JSON.stringify(foo, replacer);// {"week":45,"month":7} //对象中的undefined被忽略
  • toJson()

一个对象拥有toJSON方法,序列化时直接执行toJSON方法

var obj = {
  foo: 'foo',
  toJSON: function () {
    return 'bar';
  }
};
JSON.stringify(obj);      // '"bar"'
JSON.stringify({x: obj}); // '{"x":"bar"}'-
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值