zoukankan      html  css  js  c++  java
  • js学习之数据类型

    js学习之数据类型

      基础类型:number string boolean null undefined
      引用类型:object array function

      ES6新增 : symbol

     

      undefined值是派生自null值的(undefined == null); //true

      Boolean(message);
        数据类型 转换为true 转换为false
        Boolean true false
      String 任何非空字符串 ""(空字符串)
      Number 任何非零数字值 0和NaN
      Object 任何对象 null
      Undefined 不适用 undefined

      JavaScript 从左向右计算表达式。不同的次序会产生不同的结果:
        1、var x = 911 + 7 + "Porsche"; //918Porsche
        2、var x = "Porsche" + 911 + 7; //Porsche9117

      JavaScript 拥有动态类型。这意味着相同变量可用作不同类型:

      == 和 ===
        ==:称为等值符,当等号两边的类型相同时,直接比较值是否相等,若不相同,则先转化为类型相同的值,再进行比较;
        ===:称为等同符,当两边值的类型相同时,直接比较值,若类型不相同,直接返回false;

      null和undefined的区别
        undefined表示系统级的、出乎意料的或类似错误的值的空缺;表示缺少值,此处应该有值,但没有定义。例如:var a; a就会显示undefined
        null表示程序级的、正常的或在意料之中的值的空缺; 一般多使用null。

      Infinity和NaN
        都是number类型,
        Ifinity 表示无限大,超过JS的number所能够表示的最大值

        NaN 表示not a number,无法计算的结果。
          1.任何涉及NaN的操作(例如NaN*10,NaN/10)都会返会NaN。
          2.NaN与任何数值都不相等,包括NaN本身。
            NaN === NaN //false
            //唯一识别NaN的方法
              isNaN(NaN) //true
            isNaN():检测是否为非数字
              isNaN(null) //false
              null不是数值,该方法先尝试转为数值再判断,null转为数值是0,所以结果是false.
              isNaN(true); // false
              isNaN(null); // false
              isNaN(37); // false
              isNaN("37");// false
              isNaN("");// false: 空字符串被转换成0

       数值转换:

        number(),parseInt()和parseFloat()。 number()可以用于任何数据类型,而另外两个函数则专门用于把字符串转换为数值。

        console.log(0.1+0.2) //0.30000000000000004

        如果是Boolean,true和false将分别被转换为1和0。
        如果是数字值,只是简单传入和返回。
        如果是null值,返会0。
        如果是undefined,返回NaN。
        如果是字符串则较为复杂。
        parseInt()在转换字符串的时会忽略字符串前的空格,直至找到第一个非空格字符。如果第一个字符不是数字字符或者是负号,返回NaN。

        Boolean():他不会对引号里面的数字进行自动进行转换。
        Boolean(0);//false
        Boolean('');//false
        Boolean(' ');//true
        Boolean(null)//false

        String()和toString()的区别和应用
        String()和toString()都是将其他类型的变量转换为字符串类型。

        .toString()可以将所有的的数据都转换为字符串,但是要排除null 和 undefined

        console.log(1.toString());//这种写法会报错语法错误
          这是因为javascript引擎在解释代码时对于“1.toString()”认为“.”是浮点符号,但因小数点后面的字符是非法的,所以报语法错误;而后面的“1..toString()和1.2.toStirng()”写法,javascript引擎认为第一个“.”小数点,的二个为属性访问语法,所以都能正确解释执行;对于“(1).toStirng()”的写法,用“()”排除了“.”被视为小数点的语法解释,所以这种写法能够被解释执行;

    数据类型的检测


      1、typeof:检测数据类型
        可以把数据类型当作字符串返回,返回值是一个字符串 所以 typeof(typeof(a)) //string
        typeof null; //"object" 因为特殊值null被认为是一个空的对象引用。
        局限:对于array、null和对象,typeof一律返回object。对此可以通过instanceof来区分。

        typeof对于基本数据类型判断是没有问题的,但是遇到引用数据类型(如:Array,返回object)是不起作用的。

      2、instanceof:判断一个变量是否是某个对象的实例 返回一个boolean
        instanceof 运算符判断一个对象是否是另一个对象的实例。返回true或false
        instanceof 运算符用来检测 constructor.prototype 是否存在于参数 obj 的原型链上(或者说:检测obj的原型链上是否存在constructor.prototype )

        缺点:
          1.只适用于对象类型
          2.只要当前的这个类在实例的原型链上,检测出来的结果都是true


          console.log("1" instanceof String); //false(
          new Number(1) instanceof Number //true
          console.log(1 instanceof Number); //false
          console.log(true instanceof Boolean); //false
          console.log([] instanceof Array); //true
          console.log(function(){} instanceof Function); //true
          console.log({} instanceof Object); //true

      3、constructor :属性返回对创建此对象的数组函数的引用。
          var test=new Array();
          test.constructor==Array //true

      4、Object.prototype.toString.call() 来判断数据类型

         

            var a = Object.prototype.toString;
          console.log(a.call("aaa"));// [object String]
          console.log(a.call(1));    // [object Number]
          console.log(a.call(true)); // [object Boolean]
          console.log(a.call(null)); // [object Null]
          console.log(a.call(undefined));// [object Undefined]
          console.log(a.call([]));   // [object Array]
          console.log(a.call(function() {}));// [object Function]
          console.log(a.call({}));   // [object Object]
  • 相关阅读:
    linux自动挂载
    VUE 封装 api类
    数据库中如何判断某参数为空就不执行where条件
    axios 拦截 , 页面跳转, token 验证(非本人原创)
    springboot 集成 WebSocket (非本人原创)
    spring cloud整合 websocket 的那些事
    前后端消息推送
    spring cloud 之eureka配置
    spring cloud 之demo
    linux 进程的 5 大段
  • 原文地址:https://www.cnblogs.com/zjz666/p/11336893.html
Copyright © 2011-2022 走看看