ECMAScript数据类型概念:

  ECMAScript数据类型分为两类:原始类型和对象类型(即基本类型和引用类型);

  ECMAScript数据类型也可以分为可变类型和不可变类型,数组和对象属于可变类型,Undefined、Null、Boolean、Number 和 String属于不可变类型;

  ECMAScript 包含 5 种原始类型(primitive type),即 Undefined、Null、Boolean、Number 和 String,除此之外的就都是对象了(例如:对象、数组、函数)!!!

两种数据类型的存储方式:

  基本类型值:指的是保存在栈内存中的简单数据段;

  引用类型值:指的是那些保存在堆内存中的对象,意思是,变量中保存的实际上只是一个指针,这个指针指向内存中的另一个位置,由该位置保存对象。

两种数据类型的访问方式:

  基本类型值:按值访问,操作的是他们实际保存的值;

  引用类型值:按引用访问,当查询时,我们需要先从栈中读取内存地址,然后再顺藤摸瓜地找到保存在堆内存中的值。

两种数据类型的复制:

  基本类型变量的复制:从一个变量向一个变量复制时,会在栈中创建一个新值,然后把值复制到为新变量分配的位置上;

  引用类型变量的复制:进行引用类型变量的复制时,实际上是将存储在栈中的指针进行复制并将其保存在栈内存中,而这个复制的指针副本和原指针指向存储在堆中的同一个对象。复制操作结束后,两个变量实际上将引用同一个对象;因此改变其中的一个,将影响另一个。以下有两个例子,可以自行体会下!

  var A = { name: "福尔摩斯"};
  var B = A;
  A.name="华生"; //此时修改的是Object的属性值,而变量B和A指向的是内存中的同一个Object,所以B的修改会对A产生影响
  console.log(A.name);  //华生
  console.log(B.name);  //华生

  var A= { name: "福尔摩斯"};
  var B = A;
  B= {name:"华生"};  //此时B变量指向了内存中的一个新对象 {name:"华生"},B变量存储的地址也是指向这个新的Object,所以B的修改对A不会再产生影响
  console.log(A.name);  //福尔摩斯
  console.log(B.name);  //华生

数据类型判断:

1.typeof

  typeof可以解决大部分的数据类型判断,是一个一元运算,放在一个运算值之前,其返回值为一个字符串,该字符串说明运算数的类型,所以判断某个是否为String类型,可以直接 if(typeof(你的值) == "string"){};

  var a = "hello world";
  var b = 222;
  var c= [1,2,3];
  var d = new Date();
  var e = function(){alert(111);};
  var f = function(){this.name="22";};
  console.log(typeof a); //string
  console.log(typeof b); //number
  console.log(typeof c); //object
  console.log(typeof d); //object
  console.log(typeof e); //function
  console.log(typeof f); //function

  console.log(typeof a=="string"); //true

  console.log(typeof b=="number"); //true

2. instanceof

  instanceof可以判断已知对象类型的方法;

  var c= [1,2,3];
  var d = new Date();
  var e = function(){alert(111);};
  console.log(c instanceof Array);  //true
  console.log(d instanceof Date);  //true
  console.log(e instanceof Function);  //true

3. constructor

  根据对象的constructor判断

  var c= [1,2,3];
  var d = new Date();
  var e = function(){alert(111);};
  console.log(c.constructor=== Array);  //true
  console.log(d.constructor=== Date);  //true
  console.log(e.constructor=== Function);  //true

  但 constructor 在类继承时会出错

  function A(){};
  function B(){};
  A.prototype = new B(); //A继承自B
  var c = new A();
  console.log(c.constructor === B);  //true
  console.log(c.constructor === A);  //false

  而instanceof方法不会出现该问题,对象直接继承和间接继承的都会报true

  function A(){};
  function B(){};
  A.prototype = new B(); //A继承自B
  var c = new A();
  console.log(c instanceof B);  //true
  console.log(c instanceof A);  //true

  解决construtor的问题通常是让对象的constructor手动指向自己:

  function A(){};
  function B(){};
  A.prototype = new B(); //A继承自B
  var c = new A();
  c.constructor=A;
  console.log(c.constructor === B);  //true
  console.log(c.constructor === A);   //false

4. prototype

  Object.prototype.toString.call()这种方式既解决了instanceof存在的跨页面问题,也解决了属性检测方式所存在的问题,是一个很好的解决方案。

  var a = "iamstring.";
  var b = 222;
  var c= [1,2,3];
  var d = new Date();
  var e = function(){alert(111);};
  var f = function(){this.name="22";};
  console.log(Object.prototype.toString.call(a)); //[object String]
  console.log(Object.prototype.toString.call(b)); //[object Number]
  console.log(Object.prototype.toString.call(c)); //[object Array]
  console.log(Object.prototype.toString.call(d)); //[object Date]
  console.log(Object.prototype.toString.call(e)); //[object Function]
  console.log(Object.prototype.toString.call(f)); //[object Function]

console.log(Object.prototype.toString.call(f) === "[object Function]");  //true

数据类型转换:

  javascript可以自由的进行数据类型的转换!!!

  ECMAScript中可用的3种强制类型转换:

  1.Boolean(value)——把给定的值转换成Boolean型; 
  2.Number(value)——把给定的值转换成数字(可以是整数或浮点数); 
  3.String(value)——把给定的值转换成字符串。

  js提供了parseInt()和parseFloat()两个转换函数

  parseInt()和parseFloat()是全局函数,parseInt()只解析整数,parseFloat()既可以解析整数又可以解析浮点数!

javaScript数据类型及判断的更多相关文章

  1. javascript数据类型的判断

    最近看到了很多关于数据类型判断的方法,总结了下 一.javascript的数据类型 js数据分为两种类型:原始数据类型和引用数据类型.原始数据类型有:string.number.boolean.und ...

  2. JavaScript学习总结(2)——JavaScript数据类型判断

    最近做项目中遇到了一些关于javascript数据类型的判断处理,上网找了一下资料,并且亲自验证了各种数据类型的判断,在此做一个总结吧! 一.JS中的数据类型  1.数值型(Number):包括整数. ...

  3. 关于 JavaScript 数据类型判断

    在 JavaScript 中,有 undefined.null.number.string.boolean 五种基本数据类型,另外,有一种复杂数据类型 object ,类似于 C# 中值类型.引用类型 ...

  4. JavaScript数据类型判断的四种方法

    码文不易啊,转载请带上本文链接呀,感谢感谢 https://www.cnblogs.com/echoyya/p/14416375.html 本文分享了JavaScript类型判断的四种方法:typeo ...

  5. javascript中怎么判断两个数据类型相等

    在 JavaScript 中,判断一个变量的类型尝尝会用 typeof 运算符,在使用 typeof 运算符时采用引用类型存储值会出现一个问题,无论引用的是什么类型的对象,它都返回 "obj ...

  6. Javascript:Javascript数据类型详解

    要成为一个优秀的前端工程师,系统的学习Javascript,有夯实的Javascript基础,以及对语言本身的深刻的理解,是基本功.从Javascript数据类型开始,我将对Javascript知识体 ...

  7. 第九十九节,JavaScript数据类型

    JavaScript数据类型 学习要点: 1.typeof操作符 2.Undefined类型 3.Null类型 4.Boolean类型 5.Number类型 6.String类型 7.Object类型 ...

  8. javascript学习-类型判断

    javascript学习-类型判断 1.类型判断的的武器 javascript中用于类型判断的武器基本上有以下几种: 严格相等===,用来判断null,undefined,true,false这种有限 ...

  9. JavaScript复习之--javascript数据类型隐式转换

    JavaScript数据类型隐式转换.一,函数类    isNaN()    该函数会对参数进行隐式的Number()转换,如果转换不成功则返回true.    alert()    输出的内容隐式的 ...

随机推荐

  1. ttf,eot,woff,svg,字体格式介绍及使用方法

    而由于网页中使用的字体类型,也是各浏览器对字体类型有不同的支持规格. 字体格式类型主要有几个大分类:TrueType.Embedded Open Type .OpenType.WOFF .SVG. T ...

  2. Sort Colors

    Given an array with n objects colored red, white or blue, sort them so that objects of the same colo ...

  3. C# 7.0 新功能代码范例

    随着新版本的IDE Visual Studio 15 紧锣密鼓的开发中,2016年8月24日,微软发布了与之配套的C# 7.0 preview 的新特性. 其主要特性有: 内联声明out变量 (Out ...

  4. .NET跨平台之旅:corehost 是如何加载 coreclr 的

    在前一篇博文中,在好奇心的驱使下,探秘了 dotnet run ,发现了神秘的 corehost  —— 运行 .NET Core 应用程序的幕后英雄.有时神秘就是一种诱惑,神秘的 corehost ...

  5. Ajax入门(二)

    接收服务器返回的消息 1,定义触发Ajax的js效果 2,创建Ajax方法 如果返回的数据是XML,则需使用aj.responseXML 3,接收服务器返回的消息,并显示在网页上 错误案例:直接接收服 ...

  6. javascript中的感叹号 "!"

    JavaScript中会经常遇到一个操作符:! 这是一个布尔操作符,用于将操作的值强制转换为布尔值并取反.常用场景如下: //条件判断中使用 var a; var b=null; if(!a){ co ...

  7. 走格子 51nod

    球最少需要的能量,就是保证能量一直>=0,从头遍历取过程中能量最小值,绝对值为答案. #include<iostream> #include<algorithm> #in ...

  8. git 命令学习

    last-update: 2016年10月27日 1. git stash 简短描述 当你正在进行项目中某一部分的工作,但是里面的东西处于一个比较杂乱的状态,但是却想要切换到其他分支.问题是,你不想提 ...

  9. 织梦多语言站点,{dede:include filename=''/}引入问题

    织梦模板include插入非模板目录文件出现"无法在这个位置找到"错误的解决办法 以下是dede V55_UTF8 查dede include标签手册 (3) include 引入 ...

  10. Eclipse中一个Maven工程的目录结构

    在之前的javaSE开发中,没有很关注Eclipse工程目录下的环境,总是看见一个src就点进去新建一个包再写一个class.以后的日子中也没有机会注意到一个工程到底是怎么组织的这种问题,跟不要说自己 ...