JavaScript中的类型转换(一)
16lz
2021-01-22
-
前言
JavaScript是一种非常灵活的弱类型的语言,它的灵活性的一方面体现在其繁杂多样的类型转换。比如当JavaScript期望使用一个布尔值的时候(比如if语句中)你可以提供任一类型的值,JavaScript会按照需要自行转换类型;当使用==操作符比较两个类型值的时候,也会对两个操作数按需进行转换,同样的事情也发生在使用+,>和<等操作符时。这些灵活繁杂的转换往往会使初学者不知所措,本文对JavaScript的类型转换做一个总结。
-
JavaScript中的类型分类
JavaScript中的类型可以分为两大类:原始类型( primitive types)和对象类型(object types).其中原始类型包括数字number,字符串string,布尔boolean,null和undefined五种;除此五种之外的类型都是对象类型(包括function,array,regex等).
-
原始类型到其他类型的转换
JavaScript中对于不同类型值之间的转换见下表(该表为<JavaScript权威指南>第三章表3-2)
值 字符串 数字 布尔值 对象 undefined “undefined” NaN false throws TypeError null “null” 0 false throws TypeError true “true” 1 new Boolean(true) false “false” 0 new Boolean(false) “”(空字符串) 0 false new String(“”) “1.2” 1.2 true new String(“1.2”) “one” NaN true new String(“one”) 0 “0” false new Number(0) -0 “0” false new Number(-0) NaN “NaN” false new Number(NaN) Infinity “Infinity” true new Number(Infinity) -Infinity “-Infinity” true new Number(-Infinity) 1(其他非无穷大的数字) “1” true new Number(1) {} 待讨论 待讨论 true [] “” 0 true [9] “9” 9 true [‘a’] 使用join()方法连接各个元素,分隔符为逗号 NaN true function(){} 待讨论 NaN true 从上表可以看出,JavaScript中原始类型之间的类型转换已经被明确定义,原始类型到对象的转换也被明确定义,表格中有三个内容为"待讨论"的单元格,均是对象类型到原始类型之间的转换,是JavaScript类型转换的难点。这里简单对前两种情况做一下总结:
- 只有undefined,null,空字符串,0(包括0和-0)和NaN转换为布尔类型时会被转换为false,其余类型的值转换成布尔类型都是true
- 原始类型到对象类型的转换,null和undefined会抛出异常,而number,string和bool则会转换成对应的包装类型Number,String,Boolean.对于这三种原始类型,也可以使用Object构造函数转换成对象,Object构造函数会根据传入参数的具体值来调用Number,String或者Boolean中的一个来构造对象.代码如下
var num = new Number(10); var str = new String("abc"); var boolean = new Boolean(false); var num1 = new Object(10); var str1 = new Object("abc"); var boolean1 = new Boolean(false); console.log(typeof num + " " +num.constructor ); //输出object function Number() { [native code] } console.log(typeof str + " " + str.constructor);//输出object function String() { [native code] } console.log(typeof boolean + " " + boolean.constructor);//输出object function Boolean() { [native code] } console.log(typeof num1 + " " + num1.constructor);//输出object function Number() { [native code] } console.log(typeof str1 + " " + str1.constructor);//输出object function String() { [native code] } console.log(typeof boolean1 + " " + boolean1.constructor);//输出object function Boolean() { [native code] }
更多相关文章
- JS面向对象写法
- JavaScript 对象及初识面向对象
- 第三节(JavaScript 对象、日期,函数)
- 一张图轻松搞懂javascript event对象的clientX,offsetX,screenX,
- JavaScript 基础回顾——对象
- 韩顺平 javascript教学视频_学习笔记12_js面向对象编程介绍_类(
- 如何将带有双引号反斜杠的JSON字符串转换为Javascript对象
- 用javascript 面向对象制作坦克大战(二)
- Javascript sort()不适用于Chrome中超过10个对象的数组
随机推荐