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"}'-