JS数据类型转换
JS中的数据类型
JS基本有6种简单数据类型:
String
Number
Boolean
Null
undefined
Symbol
1种复杂的数据类型:
Object。
在写程序中,数据类型是非常重要的,如果不了解当前变量的数据类型可能出现各种各样的bug。
例如:
var a=1+2+"d";
var b="d"+1+2;
console.log(a,b);
输出结果分别是3d和d12。这是因为a中先计算1+2,两个均为数字类型,则进行相加操作,碰到字符d,就将两个字符进行拼接;而b中先碰到d和1,直接进行拼接形成d1,此时已经是字符串类型,碰到2也会进行拼接。
JS中使用typeop关键字进行数据类型判断。
<script>
var a=1+2+"a";
var b="a"+1+2;
console.log(typeof a,typeof a);
返回a和b的数据类型均为string。
其他情况举例:
typeof "John" // 返回 string
typeof 3.14 // 返回 number
typeof false // 返回 boolean
typeof [1,2,3,4] // 返回 object
typeof {name:'John', age:34} // 返回 object
typeof new Date() // 返回 object
typeof function () {} // 返回 function
typeof myCar // 返回 undefined (如果 myCar 没有声明)
typeof null // 返回 object
typeof undefined // 返回undefined
typeof NaN // 返回 number
需要注意的是typeof null返回为object,因为特殊值null被认为是一个空的对象引用。
另外,undefined值是派生自null值的,因此ECMA-262规定对它们的相等性测试要返回true。
console.log(undefined == null); //返回true
Symbol:ES6 引入了一种新的原始数据类型Symbol,表示独一无二的值。比如,你使用了一个他人提供的对象,但又想为这个对象添加新的方法(mixin 模式),新方法的名字就有可能与现有方法产生冲突。如果有一种机制,保证每个属性的名字都是独一无二的就好了,这样就从根本上防止属性名的冲突。
JS中的数据类型转换
-
转换为字符串。
方法:使用 .toString或者String()(.toString()方法不可以转null和underfined,String则无此限制)。var a = 123; var b = true; var c = null; var d; console.log(typeof a, typeof b, typeof c, typeof d); console.log( typeof a.toString(), typeof b.toString(), typeof c.toString(), typeof d.toString() );
.toString()方法数值型和布尔型转换后输出string,而null和undefined则会直接报错。
而使用String()则能正常转换。
隐式转换:在+两边有一个操作符为String类型,会将两个操作符拼接为一个字符串。var a="abc"; var b=123; console.log(typeof (a+b));//返回string
注:
toString可以将任何数字转换为任意进制,写法:数据.toString(进制)。进制必须大于等于2并且小于等于36,因为数字加字母共36个。 -
转换为数值。
方法:使用Number(),parseInt(),parseFloat()。
number()可以用于任何数据类型,而另外两个函数则专门用于把字符串转换为数值。如果是Boolean,true和false将分别被转换为1和0。
如果是数字值,只是简单传入和返回。
如果是null值,返会0。
如果是undefined,返回NaN。NaN: NaN(Not a Number),即非数值是一个特殊的数值, 这个数值用于表示一个本来要返回数值的操作数未返回数值的情况。 NaN本身有两个特点: 1.任何涉及NaN的操作(例如NaN*10,NaN/10)都会返会NaN。 2.NaN与任何数值都不相等,包括NaN本身。 可以使用isNaN()判断值类型是否为NaN,返回值为true或false。
parseInt()在转换字符串的时会忽略字符串前的空格,直至找到第一个非空格字符。如果第一个字符不是数字字符或者是负号,返回NaN。
parseInt()可以接受两个参数,第一个为要转换的参数,第二个为基数(进制)。如果不指定基数意味着让parseInt()自己决定如何解析,因此为了避免错误的解析,建议指定基数。
parseFloat()用于转换浮点数。 -
转换为布尔类型。
方法:Boolean()。
布尔类型只有true和false两个值,所以任意值转换后均为true或false。
转换规则如下:
string除空字符串外其他转换后均为true;
number除0和NaN外其他转换后均为true;
object除null外其他转换后均为true;
注:使用!+变量可以将上述规则反转并隐式转换为Bool值。
例:console.log(!0);//返回true
。
所有对象的布尔值都是true,甚至连false对应的布尔对象也是true。
请注意,空对象{}和空数组[]也会被转成true。
console.log(Boolean(new Boolean(false)))// Boolean对象会转成true
console.log(Boolean([])) // 空数组会转成true
console.log(Boolean({})) // 空对象会转成true
&& 表达式从第一个开始,遇到值为false的表达式,则返回表达式本身,否则返回最后一个表达式
var obj = new Boolean(false);
console.log(obj && true);//true
console.log(true && obj);//Boolean {false}
千锋逆战,等你来战。