js --数据类型转换

1.转为字符串

1. x.toString();
     1.toString() //'1' 数字转字符串
     true.toString()//'true' 布尔值转字符串
     null.toString()//报错  null转字符串
     undefined.toString()//报错 undefined转字符串
     ({}).toSring()//'[Object][Object]'对象转字符串
2. String(x);
    String(1) //'1' 
    String(true)// 'true'
    String(null) // 'null'
    String(undefined) //'undefined'
    String({}) //'[Object][Object]'
3.老司机方法: x + ''
    1+''// '1'
    true + '' //'true'
    null + '' //'null'
    undefined + '' // 'undefined'
    var a = {};a + '' //'[Object][Object]'
复制代码

2.转成布尔值

1.Boolean(x)
    Boolean('1'); //true 字符串转布尔
    Boolean(1);//true 数字转布尔
    Boolean(0) //false 数字0转布尔为false
    Boolean(null) //false
    Boolean(undefined) //false
    Boolean('') //false 空字符串
    Boolean(NaN) //false NaN
    Boolean({}) //true 对象转成布尔值都是true
2.!!X
    !!1; //true
    !!'1' //true
    !!0 //false
    !!null //false
    !!undefined //false
    !!'' //false
    !!NaN //false
    !!{} //true
复制代码

3.转成Number

1.Number(x)
2.parseInt(x,10) //parseInt('1') === 1
3.parseFloat(x)// parseFloat('1.23') === 1.23
4.'x' + 0 //'1' + 0 === 1
复制代码

4.包装对象

所谓“包装对象”,就是分别与数值、字符串、布尔值相对应的Number、String、Boolean三个原生对象。这三个原生对象可以把原始类型的值变成(包装成)对象。

Number、String和Boolean如果不作为构造函数调用(即调用时不加new),常常用于将任意类型的值转为数值、字符串和布尔值。

这三个对象作为构造函数使用(带有new)时,可以将原始类型的值转为对象;作为普通函数使用时(不带有new),可以将任意类型的值,转为原始类型的值。

var v1 = new Number(123);
var v2 = new String('abc');
var v3 = new Boolean(true);
基于原始类型的值,生成了三个对应的包装对象
typeof v1 // "object"
typeof v2 // "object"
typeof v3 // "object"

v1 === 123 // false
v2 === 'abc' // false
v3 === true // false
复制代码

包装对象的最大目的,首先是使得 JavaScript 的对象涵盖所有的值,其次使得原始类型的值可以方便地调用某些方法

Number、String和Boolean如果不作为构造函数调用(即调用时不加new),常常用于将任意类型的值转为数值、字符串和布尔值。

Number(123) // 123
String('abc') // "abc"
Boolean(true) // true
复制代码
valueOf()

返回包装对象实例对应的的原始类型的值。

new Number(123).valueOf()  // 123
new String('abc').valueOf() // "abc"
new Boolean(true).valueOf() // true
复制代码
toString()

返回对应的字符串形式

new Number(123).toString() // "123"
new String('abc').toString() // "abc"
new Boolean(true).toString() // "true"
复制代码
原始类型与实例对象的自动转换

原始类型的值,可以自动当作对象调用,即调用各种对象的方法和参数。这时,JavaScript 引擎会自动将原始类型的值转为包装对象实例,在使用后立刻销毁实例。

比如,字符串可以调用length属性,返回字符串的长度。

'abc'.length // 3
复制代码

上面代码中,abc是一个字符串,本身不是对象,不能调用length属性。JavaScript 引擎自动将其转为包装对象,在这个对象上调用length属性。调用结束后,这个临时对象就会被销毁。这就叫原始类型与实例对象的自动转换。

var str = 'abc';
str.length // 3

// 等同于
var strObj = new String(str)
// String {
//   0: "a", 1: "b", 2: "c", length: 3, [[PrimitiveValue]]: "abc"
// }
strObj.length // 3
复制代码

自动转换生成的包装对象是只读的,无法修改。所以,字符串无法添加新属性。

var s = 'Hello World';
s.x = 123;
s.x // undefined

复制代码

上面代码为字符串s添加了一个x属性,结果无效,总是返回undefined。

另一方面,调用结束后,包装对象实例会自动销毁。这意味着,下一次调用字符串的属性时,实际是调用一个新生成的对象,而不是上一次调用时生成的那个对象,所以取不到赋值在上一个对象的属性。如果要为字符串添加属性,只有在它的原型对象String.prototype上定义

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值