美文网首页
JS必备基础之隐式类型转换、包装类

JS必备基础之隐式类型转换、包装类

作者: 张先觉 | 来源:发表于2020-10-16 09:58 被阅读0次

#显示类型转换

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

相关文章

  • JS必备基础之隐式类型转换、包装类

    #显示类型转换 console.log(parseInt('xx123'),parseInt('123xxx'),...

  • 隐式转换的规则

    问题:隐式转换的规则是什么 说起JS的隐式转换规则,我们可以说下JS的基础数据类型 JS的七中类型 我们所熟知的J...

  • js中的类型转换

    在js中数据转换分为3种:隐式类型转换,强制类型转换,函数转换 1.隐式类型转换 (1):运算符转换 js中的值在...

  • JavaScript 01 (JS引入/变量/数据类型/类型转换

    JS的引入及调试,常量,字面量,变量,JS中的数据类型,JS的运算符,JS的运算符之隐式类型转换,强制类型转换,M...

  • 类型转换

    js的类型转换分成显示和隐式,显式转换常用类型转换函数进行转换,隐式最多用在条件判断,通常是把字符转为布尔型。类型...

  • JavaSE之隐式转换、强制转换

    课前小例 转换类型:隐式转换(自动类型转换)、强制类型转换 隐式转换:两种类型彼此兼容,范围小的类型转成范围大的类...

  • JS中的{} + [] 和 [] + {}

    在Js中,由于它的弱类型语言特性,存在大量的隐式转换。基础类型(即string, boolean,number,n...

  • 【二】基本数据类型和Eclipse使用

    1.基本数据类型(4类8种) 2.强制类型转换 隐式转换隐式转换 显式转换显式转换 3.Eclipse使用介绍 E...

  • JS里的数据类型转换

    在js中,数据类型转换分为显式数据类型转换和隐式数据类型转换。 1, 显式数据类型转换 a:转数字: 1)Numb...

  • JavaScript类型转换

    在js中数据类型转换一般分为两种,即强制类型转换和隐式类型转换(利用js弱变量类型转换)。 强制类型转换 即通过使...

网友评论

      本文标题:JS必备基础之隐式类型转换、包装类

      本文链接:https://www.haomeiwen.com/subject/vttzpktx.html