包装对象和数据类型转换
包装对象
-
包装对象
- 数字、布尔、字符串等基本数据类型都有对应的包装对象类型
- 例:new Number(20); new String(‘SomeStr’); //装箱
- 存储或读取基本类型(字符串、数字、布尔)值的属性时,会创建临时包装对象
- 例: console.log(‘Hello,World’.length);
- 基本类型其属性不能被改变、添加或删除(原始值不可变性)
- 数字、布尔、字符串等基本数据类型都有对应的包装对象类型
-
临时包装对象 —— 使用后立即释放
-
存取字符串、数字或布尔值的属性时创建的临时对象称为包装对象
-
用来处理属性的引用,一旦属性引用结束,包装对象就会销毁
-
var str=”test”; str.p = 4;//设置临时对象属性 var t = str.p; // 临时对象已释放,再输出t时为undefined
-
数据类型转换
-
基本数据类型的值
- Number类型的值
- 整数与浮点数
- NaN、Infinity、-Infinity、+0、-0
- String类型的值
- 空字符、字符和字符串、转义字符
- Boolean类型的值
- true、false
- Null与Undefined
- null、undefined
- Number类型的值
-
NaN
-
表示一个没有意义、不正确的数值
-
console.log( typeof NaN);//Number
-
-
与自身不相等 —— NaN != NaN
-
isNaN()函数
- 用来检测参数是否为 NaN 值
- 参数是 “NaN” 时返回 true,否则返回 false
-
-
引用数据类型的值
- 简单对象
- 数组
- 函数对象
- 函数也是对象(可执行的对象),也有属性和方法
- 正则对象
-
类型转换
- 隐式类型转换
- 使用关系运算符时的转换(==、>、<、引用类型和基本类型比较时
- 使用算数运算符时的转换(‘img’+ 3 + ‘.jpg’; “25”-0;)
- 使用逻辑运算符时的转换( !!0; )
- 执行流程语句时的转换(if(obj){…})
- 显式类型转换(强制类型转换)
- Boolean()、Number()、String()、Object()
- 数转为字符串(toString()、toFixed()、toPrecision()、toExponential())
- 字符串转为数字(parseInt()、parseFloat())
- 对象转换为原始值(toString()、valueOf())
- 转换成Number类型
- undefined —— NaN
- null —— 0
- 布尔值 —— false转换成0;true转换成1
- 数字 —— 不变
- 字符串 —— 解析字符串中的数字,空字符转换为0
- 强制转换: parseInt()、parseFloat()、Number()
- Object:调用valueof().toString(),再转换为number类型
- 转换成String类型
- undefined —— ‘undefined’
- null —— ‘null’
- 布尔值 —— false—>‘false’ ; true—>‘true’
- 数字
- 字符串 —— 不变
- 强制转换:String()
- Object:调用toString()方法
- 转换成Boolean类型
- undefined —— false
- null —— false
- 布尔值
- 数字 —— 0、NaN —>false;其他数字—>true
- 字符串 —— "—>false;其他字符串—>true
- 强制转换:Boolean()
- Object:true(任意对象)
- 转换成Object
- 对象
- undefined、null——空对象{}
- string、number、Boolean —— 包装对象
- new Boolean(bool)、new Number(num)、new String(str)
- 强制转换:Object()
- 隐式类型转换