javaScript数据类型及判断
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数据类型及判断的更多相关文章
- javascript数据类型的判断
最近看到了很多关于数据类型判断的方法,总结了下 一.javascript的数据类型 js数据分为两种类型:原始数据类型和引用数据类型.原始数据类型有:string.number.boolean.und ...
- JavaScript学习总结(2)——JavaScript数据类型判断
最近做项目中遇到了一些关于javascript数据类型的判断处理,上网找了一下资料,并且亲自验证了各种数据类型的判断,在此做一个总结吧! 一.JS中的数据类型 1.数值型(Number):包括整数. ...
- 关于 JavaScript 数据类型判断
在 JavaScript 中,有 undefined.null.number.string.boolean 五种基本数据类型,另外,有一种复杂数据类型 object ,类似于 C# 中值类型.引用类型 ...
- JavaScript数据类型判断的四种方法
码文不易啊,转载请带上本文链接呀,感谢感谢 https://www.cnblogs.com/echoyya/p/14416375.html 本文分享了JavaScript类型判断的四种方法:typeo ...
- javascript中怎么判断两个数据类型相等
在 JavaScript 中,判断一个变量的类型尝尝会用 typeof 运算符,在使用 typeof 运算符时采用引用类型存储值会出现一个问题,无论引用的是什么类型的对象,它都返回 "obj ...
- Javascript:Javascript数据类型详解
要成为一个优秀的前端工程师,系统的学习Javascript,有夯实的Javascript基础,以及对语言本身的深刻的理解,是基本功.从Javascript数据类型开始,我将对Javascript知识体 ...
- 第九十九节,JavaScript数据类型
JavaScript数据类型 学习要点: 1.typeof操作符 2.Undefined类型 3.Null类型 4.Boolean类型 5.Number类型 6.String类型 7.Object类型 ...
- javascript学习-类型判断
javascript学习-类型判断 1.类型判断的的武器 javascript中用于类型判断的武器基本上有以下几种: 严格相等===,用来判断null,undefined,true,false这种有限 ...
- JavaScript复习之--javascript数据类型隐式转换
JavaScript数据类型隐式转换.一,函数类 isNaN() 该函数会对参数进行隐式的Number()转换,如果转换不成功则返回true. alert() 输出的内容隐式的 ...
随机推荐
- phoneGap+cordova+ionic混合app开发环境搭建
参考链接:http://www.w2 bc.com/article/177257 待补充
- Node.js起步 -- (1)
先来简单介绍nodeJS 我们知道JavaScript是运行在浏览器中的,浏览器为它提供了一个上下文(context),从而让JavaScript得以解析执行. nodeJS其实可以这么理解,它是另外 ...
- [LeetCode] Line Reflection 直线对称
Given n points on a 2D plane, find if there is such a line parallel to y-axis that reflect the given ...
- web 前端常用组件【07】弹出层 Layer
web 项目中总是需要弹出框,来让用户进行下一步的操作. 大到弹出另外一个页面,小到弹出提示.确认等. 经手几个项目,还是感觉 Layer 用起来比较的轻松,你能想到的 Layer 都能帮你做到. 感 ...
- 如何为Surface Dial设备开发自定义交互功能
随着Surface Studio的发布,微软发布了与之相配套的外设硬件Surface Dial,用户可以将Surface Dail吸附在Surface Studio的屏幕上面,用旋转和点击的实体操作来 ...
- Linux CGroup之freezer分析与应用
Linux Kernel:4.4.17 CGroup的freezer子系统对于成批作业管理系统很有用,可以成批启动/停止任务,以达到及其资源的调度. freezer子系统也有助于针对运行一组任务设置检 ...
- hibernate处理null 时提示:Property path [...] does notreference a collection
Hibernate判断某属性不为null 且不可为空时出现Property path [...] does notreference a collection 的问题 处理空的方法: isNotEmp ...
- matlab中数组创建方法
创建数组可以使用 分号 : 逗号, 空格 数组同行用 逗号,或空格分割 不同行元素用 分号: clc; a = [ ]; b1 = a();%第3个元素 b2 = a(:)%第2//4个元素 b3 ...
- BZOJ 2815: [ZJOI2012]灾难
呃,题面没了,大概就是给出一些生物之间的捕食关系,求灭绝树每个点的灾难值. 拓扑排序之后倒着加入点,动态维护fa[][]数组,倍增法求LCA,当然大佬愿意写动态树也是极好的…… #include &l ...
- maven项目project facets中是2.3调整为3.0的解决办法
以前情况下直接直接调整到3.0下面的按钮就会变成不可以点,当把前面的勾取掉就可以点击apply了,之后再次把勾勾上,点击apply有个弹窗默认是webcontent.在maven项目中改成src/ma ...