变量类型转换

类型转化表

Value BooleanNumberString
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:undefinednullfalse""0-0NaN  共7个 5个基本类型 2个Number的扩展 
true:都会转换成true
 
注意new Boolean(false)是一个对象,转换成布尔值也是true
 
 
转换为string值
 
Stirng()
.toString()
string.lengh 返回的是字符串长度 包括空格  Unicode字符会被当做一个整体
 
 
转换为number值
 
Number()、  (做普通函数用时) 任何数据类型    不推荐,容易返回NaN
parseInt()       字符串
parseFloat()          字符串
 
 

字符串转换成数字,会有以下的特点:

  1. 以数字表示的字符串可以直接转换成数字

  2. 允许字符串开头跟结尾带有空格

  3. 在开始和结尾处的任意非空格符都不会被当成数字直接量的一部分,转换结果变成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()方法:

  1. 数组类Array.prototype.toString()

  2. 函数类Function.prototype.toString()

  3. 日期类Date.prototype.toString()
  4. 正则类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判断、+运算符以及==运算符等等
 
加法运算符更偏爱字符串的操作(有一个是字符串就进行连接),比较运算符,其他运算符更偏爱数字 (有一个是数字就比较数字
 
注意:<=以及>=在判断相等的情况的时候,它们只是简单的不大于不小于 ,不存在类型转换

                                                                  

posted @ 2016-09-03 23:21  阿巴阿巴55996  阅读(138)  评论(0)    收藏  举报