#显示类型转换
console.log(parseInt('xx123'),parseInt('123xxx'),parseInt('1xxx23'))打印结果是什么?
数据类型转换:Number、String、Boolean、null、undefined之间的转换;
显示类型转换常用方法:Number()、parseInt()、parseFloat()、String()、Boolean();
console.log(parseInt('xx123')); // 打印结果:NaN
console.log(parseInt('123xxx')); // 打印结果:123
console.log(parseInt('1xxx23')); // 打印结果:1
// parseInt(……,radix)
// radix 基数、进制 2-36(默认十进制)
console.log(parseInt("10", 16)); // 打印结果:16
#隐式类型转换
console.log(2 > 1 == 3)打印结果是什么?
隐式类型转换:JS偷偷地做了类型转换,不用你管
1. ++ --
2. ''+
3. ''- * / % > >= < <= == !=
4. undefined、null与数字进行比较,undefined、null与数字没有关系,怎么比较都是false
5. isNaN(),会先进行Number()数据类型转换,再判断是否是数字。
6.(-true)、(+undefined),正负号隐式类型转换为Number,所以,(-true) -> -1
、(+undefined)->NaN
7.(!!" ")和(!!"")的区别?!!
隐式转换Boolean。注意," "
空格字符串为true,而""
空字符串是false
var a = "123";
a++;
console.log(a); // 过程: Number(a) > a++ > console.log()
console.log("js" + 123); // 过程:String(123) > ('js' + '123') > console.log()
console.log("2" % 3); // 过程:Number('2') > ('2' % 3) > console.log()
console.log(2 > 1 == 3); // 结果:false 分析:2 > 1先得到true; 再隐式类型转换以下Number(true)得到1,最后,拿1和3比较;
console.log(undefined > 0, undefined < 0, undefined == 0); // 结果:false,undefined和0没有关系,怎么比较都是false
console.log(null > 0, null < 0, null == 0); // 结果:false,null和0没有关系,怎么比较都是false
console.log(null == undefined, null === undefined); // 结果:true false,既然都和0没有关系,干脆结果相等算了,但是类型不一样。
console.log(isNaN(null), Number(null), isNaN(undefined), Number(undefined)); // 打印结果:false 0 true NaN
#隐式类型练习
- 练习1:
(-true)、(+undefined)
if (typeof a && -true + +undefined + "") {
console.log("通过了");
} else {
console.log("没有通过");
}
// console.log(-true); -> -1
// console.log(+undefined); -> NaN
// console.log(-true + -undefined + ""); -> "NaN"
- 练习2:
!!、!!" "、!!""
console.log(!!" " + !!"" - !!false || "未通过");
// console.log(!!" "); -> true
// console.log(!!""); -> false
// console.log(!!false); -> false
# 包装类:将原始值转换成对象
原始值是没有属性和方法的!如果非要让原始值拥有自己的属性
例如:var str = '123';console.log(str.length);
,该怎么办呢?所以,JS引擎提供了三种构造函数:Number、String、Boolean,能将原始值转换成为对象。
- var str = '123';console.log(str.length);打印结果为何是3?分析?
var str = "123";
console.log(str.length); // 结果:3
// 分析
// console之前,JS引擎会先将str转成对象。例如:“console.log(new String(str).length)”
- var str = '123';str.length=1;console.log(str.length);打印结果为何是3?分析?
// 案例1:
var arr = [1,2,3,4,5];
arr.length = 3;
console.log(arr); // 打印结果:[1,2,3]
// 案例2:
var str = 'string';
str.length = 3;
console.log(str.length); // 打印结果:6
// 分析:
// str.length = 3; -> new String(str).length = 3;没有变量储存,无奈之下,delete删除该属性
// console.log(),JS引擎将str转成对象。例如:“console.log(new String(str).length)”
// 解决方案
var str = 'string';
var str1 = (str.length = 3);
console.log(str1); // 打印结果: str
- (练习题)修改下面代码,让其打印结果为string:
var name = "xiaoming";
name += 10;
var type = typeof(name);
if(type.length === 6) {
type.text = 'string';
}
console.log(type.text); // 打印结果是:undefined
// 分析:
type.text = 'string';
-> JS引擎隐式地进行包装类:new String(type).text = 'string'
-> 但是,没有变量可以保存该变量,只能默默地删除该属性,delete
-> 导致最后打印:undefined
-> 解决方案:事先将type字符串变成对象,然后添加text属性,如此text属性便能保存下来。
// 修改代码如下:
var name = "xiaoming";
name += 10;
var type = new String(typeof(name));
if(type.length === 6) {
type.text = 'string';
}
console.log(type.text); // 打印结果是:string
网友评论