js学习之数据类型

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

  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,返回abject)是不起作用的。

    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

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

      Object.prototype.toString.call()

      var a = Object.prototype.toString;

      console.log(a.call("aaa"));
      console.log(a.call(1));
      console.log(a.call(true));
      console.log(a.call(null));
      console.log(a.call(undefined));
      console.log(a.call([]));
      console.log(a.call(function() {}));
      console.log(a.call({}));

js学习之数据类型的更多相关文章

  1. JS学习笔记-数据类型

    最初的JS学习已经过去大半年的时间了,至此感觉对JS的使用与理解并非非常深入,因此在近期的工作之余也開始了新一轮的JS学习. 几天时间过去了,对于一些基础内容的学习还是非常有必要的,就从今天的又一次整 ...

  2. D3.js学习记录 - 数据类型【转】【新】

    1.变量 JAVASCRIPT的变量是一种类型宽松的语言.定义变量不用指定数据类型.而且还是动态可变的. var value = 100;value = 99.9999;value = false;v ...

  3. Javascript高级编程学习笔记(3)—— JS中的数据类型(1)

    前一段时间由于事情比较多,所以笔记耽搁了一段时间,从这一篇开始我会尽快写完这个系列. 文章中有什么不足之处,还望各位大佬指出. JS中的数据类型 上一篇中我写了有关JS引入的Script标签相关的东西 ...

  4. JS学习笔记(一)基本数据类型和对象类型

    js是一种弱类型的语言,所有的变量都用var进行声明,字符串用双引号或单引号括起来,常见基本数据类型为number,string,boolean等.如 var num = 123;或var num = ...

  5. Js学习(2)数据类型

    Js共有六种数据类型(ES6又增加了第七种Symbol类型的值): 原始类型:数值,字符串,布尔值 合成类型:对象(object):各种值组成的集合 其他undefined,null 对象又可以分成三 ...

  6. 【Knockout.js 学习体验之旅】(1)ko初体验

    前言 什么,你现在还在看knockout.js?这货都已经落后主流一千年了!赶紧去学Angular.React啊,再不赶紧的话,他们也要变out了哦.身旁的90后小伙伴,嘴里还塞着山东的狗不理大蒜包, ...

  7. JS 学习笔记--9---变量-作用域-内存相关

    JS 中变量和其它语言中变量最大的区别就是,JS 是松散型语言,决定了它只是在某一个特定时间保存某一特定的值的一个名字而已.由于在定义变量的时候不需要显示规定必须保存某种类型的值,故变量的值以及保存的 ...

  8. JS~JS里的数据类型

    JS里的数据类型,它虽然是个弱类型的语言,但它也有自己的规定的,它不会向其它语言那么,使用int来声明一个整形变量,而是使用 var,如果你是一个C#的开发者,你就会知道,原来C#现在也在和JS学,开 ...

  9. js基础--javaScript数据类型你都弄明白了吗?绝对干货

    欢迎访问我的个人博客:http://www.xiaolongwu.cn 数据类型的分类 JavaScript的数据类型分为两大类,基本数据类型和复杂数据类型. 基本数据类型:Null.Undefine ...

随机推荐

  1. 测试调试-利用fiddler修改response返回结果

    测试前端过程中,经常需要验证各种功能状态.不同数据层级等返回后的展示效果.一般会通过以下三种方式进行测试: 1.构造满足条件的测试数据:(耗时费力) 2.修改数据库:(前提需要了解数据库数据存储.沟通 ...

  2. springboot自动装配(2)---实现一个自定义自动装配组件

    对于springboot个人认为它就是整合了各种组件,然后提供对应的自动装配和启动器(starter),基于这个流程去实现一个定义的装配组件 还是这张图 一.创建自己的自动配置工程, spring.f ...

  3. Jenkins高级应用——Publish Over SSH插件

    在之前的篇幅中有介绍,利用jenkins结合shell脚本完成远程部署的功能,点击Jenkins结合shell+expect脚本完成线上环境自动构建部署即可查看. 上述方式需要引入expect脚本,安 ...

  4. HashMap源码分析(二):看完彻底了解HashMap

    上文讲到HashMap的增加方法,现在继续 上文链接 HashMap在上一篇源码分析的文章中,如果使用put的时候如果元素数量超过threshold就会调用resize进行扩容 1.扩容机制 想要了解 ...

  5. blast2go本地化 mysql_study

    mysql yum -y install mysql mysqladmin -uroot -passwd "oebiotech" mysql -uroot -poebiotech ...

  6. Learning the Depths of Moving People by Watching Frozen

    基于双目的传统算法 对静止的物体, 在不同的 viewpoints 同一时刻进行拍摄, 根据拍摄到的结果, 使用三角测量算法计算出平面 2D 图像在 3D 图像中的坐标 单目 Ground Truth ...

  7. javascript之正则表达式(二)

    js正则贪婪模式与非贪婪模式 类似于贪吃蛇游戏,越吃越长.而贪婪模式就是尽可能多的匹配. 默认是贪婪模式      (尽可能多的匹配)                           例子: va ...

  8. 论样式表css的重要性

    如下图所示两个网页代码基本相同,但左边网页加入样式表后就形成了右边的视觉效果,由此可见 在网页中html用于标记,css用于显示,而JavaScript则用于增强与用户的交互性. 加入的代码是 < ...

  9. 自实现input上传指定文件到服务器

    遇到问题,解决问题,记录问题,成长就是一步一步走出来的. 一.添加 input 标签 我的工作中遇到了,需要上传pdf文件到服务器的需求,而且只能上传pdf文件,accept指定了 pdf 类型. & ...

  10. LINUX下查找大文件及大的文件夹

    原帖地址:https://www.cnblogs.com/iyoume2008/p/6105590.html 今天正好碰到这样的问题,在博客园中看到有以上地址的一篇文章,照着上面的操作解决了问题,但是 ...