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. 寻觅Azure上的Athena和BigQuery(一):落寞的ADLA

    AWS Athena和Google BigQuery都是亚马逊和谷歌各自云上的优秀产品,有着相当高的用户口碑.它们都属于无服务器交互式查询类型的服务,能够直接对位于云存储中的数据进行访问和查询,免去了 ...

  2. Java学习笔记之---基础语法

    Java学习笔记之---基础语法 一. Java中的命名规范 (一)包名 由多个单词组成时,所有字母小写(例如:onetwo) (二)类名和接口 由多个单词组成时,所有单词首字母大写(例如:OneTw ...

  3. 分享几个能用的editplus注册码/2018年序列号

    注册名:host1991 序列号:14F50-CD5C8-E13DA-51100-BAFE6     注册名:360xw    注册码:93A52-85B80-A3308-BF130-40412   ...

  4. CDQZ集训DAY0 日记

    貌似没发生什么事…… 按照教练员的交代,写一下流水账…… 早上5:30到了机场,然后就默默地坐着飞机到了成都.然后就按预定好的被GXY的父亲的朋友接机(貌似因为觉得GXY和他爸的同学挺像被批判一番). ...

  5. C语言指针专题——序

    看到好多的C语言初学者学到指针时,都觉得指针怎么那么难啊!我也想起了我当时学习指针时遇到的困难,确实很难!到底是教程写的不好呢,还是老师教的不好呢?我觉得都有. 网上搜索指针讲解的资料很多,我也看了不 ...

  6. Redis HyperLogLog用法简介

    (1)HyperLogLog简介 在Redis 在 2.8.9 版本才添加了 HyperLogLog,HyperLogLog算法是用于基数统计的算法,每个 HyperLogLog 键只需要花费 12 ...

  7. Eclipse安装STS插件

    由于Spring的配置文件较多,基于Eclipse配置也比较复杂.为了提高开发的效率,建议使用STS开发工具开发,或者在Eclipse安装一个STS插件. 在开发者配置bean的class时候能够根据 ...

  8. 作为前端程序员的她凭什么成为Judy团队第一位助教?

    Judy团队第一位助教-俊英子:正直,阳光,向上,自律,优秀的女孩,当然这些词语还是无法描述出她的优秀 英子,我们第一次的时候,2月25号,下午16:26分,她突然发了一段长的文字我. 她说她一直在读 ...

  9. 个人永久性免费-Excel催化剂功能第56波-获取Excel对象属性相关自定义函数

    之前零散开发过一些自定义函数获取Excel对象属性,此次再细细地把有价值的属性都一一给开发完成,某些场景下,有这些小函数还是可以比较方便地实现一些通过Excel界面没法轻松获取到的信息. 修复与更新 ...

  10. [PTA] 数据结构与算法题目集 6-12 二叉搜索树的操作集

    唯一比较需要思考的删除操作: 被删除节点有三种情况: 1.叶节点,直接删除 2.只有一个子节点,将子节点替换为该节点,删除该节点. 3.有两个子节点,从右分支中找到最小节点,将其值赋给被删除节点的位置 ...