js基本笔记-范例装换

媒介

说好听是说JS天真, 说不好听就是JS的坑太多, JS范例转换就是一个大坑, JS的范例包含了原始范例的[null, undefined, String ,Number, Boolean],以及对象范例的[function, object];

JavaScript 是一种弱范例(或称动态范例)言语,即变量的范例是不确定的。

x = 5; // 5
x = x + 'A'; // '5A'

上面代码中,变量x起先是一个数值,厥后是一个字符串,范例完全由当前的值决议,这就叫弱范例。

JS的数据范例

JavaScript中有五种原始数据范例:Undefined、Null、Boolean、Number以及String。

  1. Undefined数据范例的值只要一个:undefined。
    在JavaScript中,假如函数没有声明返回值,那末会返回undefined。
    假如typeof背面跟一个未定义的参数,也是返回undefined。

    function undefinedA(){}
    undefinedA();//返回undefined
    typeof abc;//变量abc未声明,返回undefined
  2. Null数据范例的值只要一个:null。
    null与undefined的关联:undefined实际上是从null派生出来的。实在一切的js的object对象的父对象都是null。

    undefined == null;//返回true
  3. typeof是一元运算符,后跟变量的称号,用于猎取变量的数据范例,其返回值有5个:undefined、boolean、number、string以及object。

转换划定规矩

  1. 转 boolean 划定规矩:
    null, undefined, “”, 0, -0, NaN 转换成布尔值是 false, 剩下的全转化 true;

  2. 转 number 划定规矩:

    • string ‘2.3.1’ => NaN;
      非数字情势的,如str,str2.3,2.3.3.3,a+3.2都将会转换成非数字及NaN

    Number('str');//NaN
    Number('2.3.3.3');//NaN
    Number('a+1.2');//NaN
    Number('2.3');//2.3
    • null, ”, false, [] => 0;
      null,空字符串,FALSE,空数组,都将会转换成数字0(这个可能在隐式范例转换中看到的比较多)

    Number(null);//0
    Number('');//0
    Number(false);//0
    Number([]);//0
    • undefined => NaN;
      undefined即未定义,转换为非数字

    Number(undefined);//NaN
    • object => x Number(object.toString())
      假如没法从valueOf()要领中猎取Primitive值,那末挪用object的toString()要领;假如toString()返回的是Primitive值,则将该Primitive值转换成number后返回。(Primitive这个临时没懂)

    Number([2]);//2
    Number([2,3]);//NaN
    Number({});//NaN
  3. 隐式范例转换 ==

    • 有布尔值则转换为数值

      1 == true;//true
      0 == false;//true
    • 字符串数值,则字符串转换为数值

      '2' == 2;//true

      依据上面两条,能够想到一个很风趣的转换,以下

      !!'2' == true;//true,bool值全转为数字,字符串转数字,数字前加非划定规矩为,非0的都转1
    • 只要一个是对象,则对象会挪用toString() valueOf()

      "[object Object]" == {id:1};//true,这里的对象举行挪用了toString()要领
      "[object Function]" == {id:1};//false
    • null == undefined

      null == undefined;//true
    • NaN != NaN

      NaN != NaN
    • 对象==,比较内存地址

      var a = {id:1};
      var b = {id:1};
      a == b;//false,对象比较的内存地址

转换函数

  1. 强迫转换:parseInt,parseFloat,Number,String,Boolean

    下面的例子以下,以Number为例

    Number(false);//0 
    Number(true);//   1 
    Number(undefined);//   NaN 
    Number(null);//   0 
    Number( "5.5 ");//   5.5 
    Number( "56 ");//   56 
    Number( "5.6.7 ");//   NaN 
    Number(new   Object());//   NaN 
    Number(100);//   100  
  2. 隐式范例转换:==,-,+,*,if,>=,<=,while,for in,alert

    隐式范例转换在比较以及推断,另有做算术运算的时刻比较罕见

    • 比较运算

    '2' == 2;//true;
    '2' > 0;//true;
    • while,for in, alert运算

    alert(new Boolean(false));//false,转成字符串
    • 算术运算

    '2'+1;//'21'
    1+true;//2
    '2'+true;//'2true'
    '2'-1;//1
    '210'-'10';//100
    '2'*'3';//6

参考

  1. 下表作为参考, 来自js威望指南:

    原始范例和对象范例转换成String转换成Number转换成Boolean转换成Object
    undefined“undefined”NaNfalsethrows TypeError
    null“null”0falsethrows TypeError
    true“true”1new Boolean(true)
    false“false”0new Boolean(false)
    “”(empty string)0falsenew String(“”);Object(“”)
    “1.2” (nonempty, numeric)1.2truenew String(“1.2”);Object(“1.2”)
    “one” (nonempty, non-numeric)NaNtruenew String(“one”);Object(“one”)
    0“0”falsenew Number(0);Object(0)
    -0“0”falsenew Number(-0);Object(-0)
    NaN“undefined”falsenew Number(NaN);Object(NaN)
    Infinity“Infinity”truenew Number(Infinity);Object(Infinity)
    -Infinity“-Infinity”truenew Number(-Infinity);Object(-Infinity)
    1 (finite, non-zero)“1”truenew Number(1);Object(1)
    {} (any object)NaNtrue
    [] (empty array)“”0true
    [9] (1 numeric elt)“9”9true
    [‘a’] (any other array)use join() methodNaNtrue
    function(){} (any function)“undefined”NaNtrue
    原文作者:fania
    原文地址: https://segmentfault.com/a/1190000003948951
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞