zoukankan      html  css  js  c++  java
  • 类型转换之值类型之间转换

    js 中的类型在运行前是无法确定的,我们无法通过变量的定义来区分变量的真实类型,一个变量我们可以随意为其赋值任何类型。

    就像我们定义一个变量var value;此时我们真无法确定后面到底会赋值给其如何类型。js的基本类型分undefined,number,boolean,string,object,function.

    其中object和function类型又属于引用类型,剩下的那些算值类型。当然js中还有许多派生出来的类型如:Data,Regex或者自己定义的类型它们都算object的子类型。

    这里要说明我们通过Number,Boolean,String这些创出来的对象,它们与number,boolean,string是没有关系的,它们可以看做类似其他语言中的装箱。

    var num1 = 10;//这时一个number基本类型
    var num2 = new Number(10);//这时一个object类型
    var bool1 = true;//这时一个boolean基本类型
    var bool2 = new Boolean(true);//这时一个object类型

     js中的隐式存在的类型转换无非两种,值类型转值类型,引用类型转值类型,我们知道引用类型转值类型的时候,会调用valueOf,或许还会调用toString。但是值类型转值类型通常就不需要这么麻烦了。

    js中蕴含的隐式转换规则会考虑到运算元,也会考虑到运算符,同样的一个运算符用于不同的地方或许就代表不同的意思,譬如+运算符,当用于一元运算符,代表转换为数值,用于两个数值之间代表相加,用于有字符串的时候代表字符串的连接

    var v1 = +1;
    alert(v1);//1
    alert(typeof v1);//number;

    var v2 = +'1';
    alert(v2);//1
    alert(typeof v2);//number;

    var v3 = +'01';
    alert(v3);//1
    alert(typeof v3);//number;

    var v4 = +'09';
    alert(v4);//9 注意这边不会按8进制转换
    alert(typeof v3);//number;

    var v5 = +'x1';
    alert(v5);//NaN转换为数字的时候失败
    alert(typeof v5);//NaN

    当+运算符有一个运算元为字符串时,另外一个 也会隐式转换为字符串

    var v1 = 1+'2';//'12'
    var v2 = {}+'2';//'[object Object]2'
    var v3 = true +'2';//'true2';

    当出现减号,我们想想都知道肯定会把任何运算元都尝试转换为数字,如果转换失败就返回NaN,true和false转为为数字时为变为1和0,但是返过来0也可以变为false,0以外的任何数字变true

    当字符串尝试转换为数字时会尽量让其转换成功 ,不过可不会按照我们常理如果0开头按八进制,0x开头按16禁止,因为这些规则在用与parseInt时才会自动识别

    alert('10'-1);//9
    alert(10-'1');//9
    alert('010x'-'7');//3
    alert('0010'-'07x');//3
    alert('12yz'-'6tt');//6
    alert('{}'-'3');//NaN
    alert(true-1);//0 true转换为1
    alert(false-1);//-1 false转为为0
    alert(true-false);//1

     当用于会产生布尔值的情况下如if,while,||,&&等情况下,除了null,'',0,undefined,NaN会转换为false,其他一律转换为true

    if({})//true
    if(new Date())//true
    if(null)//false
    if(undefined)//false
    if(0)//false
    if(-1)//true

  • 相关阅读:
    H5实现查看图片和删除图片的效果
    HTTP 状态码(HTTP Status Code)
    HashMap详解(基于JDK 1.8)
    FutureTask详解
    ForkJoin框架详解
    final详解
    磁盘管理之inode与block
    如何在CentOS上安装一个2048小游戏
    Linux帮助手册(man)
    Linux入门-基础命令
  • 原文地址:https://www.cnblogs.com/fuyun2000/p/2413388.html
Copyright © 2011-2022 走看看