变量类型转换
类型转化表
| Value | Boolean | Number | String | 
|---|---|---|---|
| undefined | false | NaN | "undefined" | 
| null | false | 0 | "null" | 
| true | true | 1 | "true" | 
| false | false | 0 | "false" | 
| '' | false | 0 | '' | 
| '123' | true | 123 | '123' | 
| '1a' | true | NaN | '1a' | 
| 0 | false | 0 | "0" | 
| 1 | true | 1 | "1" | 
| Infinity | true | Infinity | "Infinity" | 
| NaN | false | NaN | 'NaN' | 
| {} | true | NaN | "[object Object]" | 
转换为boolean值faile:
undefined、null、false、""、0、-0、NaN  共7个 5个基本类型 2个Number的扩展 true:都会转换成
true注意:
new Boolean(false)是一个对象,转换成布尔值也是true转换为string值
Stirng()
.toString()
string.lengh 返回的是字符串长度 包括空格  Unicode字符会被当做一个整体
转换为number值
Number()、  (做普通函数用时) 任何数据类型    不推荐,容易返回NaN
parseInt()       字符串
parseFloat()          字符串
字符串转换成数字,会有以下的特点:
- 
以数字表示的字符串可以直接转换成数字
 - 
允许字符串开头跟结尾带有空格
 - 
在开始和结尾处的任意非空格符都不会被当成数字直接量的一部分,转换结果变成
NaN 
结果如下:
原始值转换成对象
原理:
构造函数
String()、Number()、Boolean()转换成他们各自的包装对象 
例如 new Number(5) 返回的是对象   而 Number(5) 返回的是数字
null undefined 没有包装对象, 但可以通过构造函数 Object 转换成空对象
对象转换成原始值
先来看两个函数:
toString()以及valueOf()  想转到字符串的形式就toString()  , 想转到 数值或者原始形式就valueOf()
所有的对象都有
toString()方法,作用就是返回一个反映这个对象的字符串(返回值包含原始声明的所有空格,包括行结束符 ) 默认结果,返回的是类型判断
var o = new Object();
o.toString()    //返回[object Object]
很多类定义了很多特定版本的toString()方法:
- 
数组类
Array.prototype.toString() - 
函数类
Function.prototype.toString() - 
日期类
Date.prototype.toString() - 
正则类
RegExp.prototype.toString()
······ 
[1,2,3].toString() // --> "1,2,3"
[1,2,3].valueOf() // --> [1, 2, 3]
(function(x){f(x);}).toString() // --> "function (x){f(x);}"
(function(x){f(x);}).valueOf() // --> function anonymous(x)
/\d+/g.toString() // -->"/\d+/g"
/\d+/g.valueOf() // --> /\d+/g
new Date(2010,0,1).toString() // --> "Fri Jan 01 2010 00:00:00 GMT+0800 (中国标准时间)"new Date(2010,0,1).valueOf() // --> 1262275200000
应用场景:
          1.代码重写 (toString 可以重写函数代码, 函数调用时运行的是toString的内容, valueOf 重写的是 “求值”时的函数, 比如
func > 0 )
          2..函数反编译
函数“反编译” (从函数变量中获得定义函数的字符串)(Opara mini 不支持)
将函数反编译从而读取该函数的参数,然后将这些参数名称保存到数组中,可用于确定函数想要得到什么样的参数值
valueOf()方法简单地返回对象本身,而不是返回一个原始值数组、函数以及正则表达式简单地继承了这个默认的方法,而日期类定义的
valueOf()方法返回它的一个内部表示:1970年1月1日以来的毫秒数数据间的操作符
例如:
if判断、+运算符以及==运算符等等加法运算符更偏爱字符串的操作(有一个是字符串就进行连接),比较运算符,其他运算符更偏爱数字 (有一个是数字就比较数字)
注意:
<=以及>=在判断相等的情况的时候,它们只是简单的不大于、不小于 ,不存在类型转换
                    
                
                
            
        
浙公网安备 33010602011771号