JavaScript--数据类型/判断,== 和 ===区别
来源:互联网 发布:淘宝怎么开QQ音速店 编辑:程序博客网 时间:2024/06/07 18:10
== 和 ===区别
==比较操作符会为两个不同类型的操作数转换类型,然后进行严格比较。当两个操作数都是对象时,JavaScript会比较其内部引用,当且仅当他们的引用指向内存中的相同对象(区域)时才相等,即他们在栈内存中的引用地址相同。==比较若类型不同,先偿试转换类型,再作值比较,最后返回值比较结果 。一致/严格相等 (===)一致运算符不会进行类型转换,仅当操作数严格相等时返回true=== 和 !== 只有在相同类型下,才会比较其值。
数据类型
最新的 ECMAScript 标准定义了 7 种数据类型:
6 种 原始类型:
- Boolean
- Null
- Undefined
- Number
- String
- Symbol (ECMAScript 6 新定义)
- 和 Object
W3C上为
字符串、数字、布尔、数组、对象、Null、Undefined
基本数据类型为:Undefined、Null、Boolean、Number和String
更准确的:
- Number(数字)
- String(字符串)
- Boolean(布尔)
- Symbol(符号)(第六版新增)
- Object(对象)
- Function(函数)
- Array(数组)
- Date(日期)
- RegExp(正则表达式)
- Null(空)
- Undefined(未定义)
原始值
除 Object 以外的所有类型都是不可变的(值本身无法被改变)。例如,与 C 语言不同,JavaScript 中字符串是不可变的(译注:如,JavaScript 中对字符串的操作一定返回了一个新字符串,原始字符串并没有被改变)。我们称这些类型的值为“原始值”。
类型判断的几种方法
typeof
var test ="haha";alert(typeof test) ------------> string其中**typeof返回的类型都是字符串形式**,需注意,例如:alert(typeof test == "string") -------------> truealert(typeof test == String) ---------------> false另外typeof 可以判断function的类型;在判断除Object类型的对象时比较方便。
instanceof
适用判断已知对象类型
alert(test instanceof String) ---------------> true
在这里需要特别注意的是:instanceof检测的是原型
如var a=new Array();
alert(a instanceof Array); // 会返回true
同时alert(a instanceof Object); // 也会返回true; 这是因为Array是object的子类。
constructor
alert(test.constructor === String) -----------> true
注意: constructor 在类继承时会出错
eg:
function A(){};
function B(){};
A.prototype = new B(); //A继承自B
var obj = new A();
alert(obj.constructor === B) ———–> true;
alert(obj.constructor === A) ———–> false;
而instanceof方法不会出现该问题,对象直接继承和间接继承的都会报true:
alert(obj instanceof B) —————-> true;
alert(obj instanceof A) —————-> true;
解决construtor的问题通常是让对象的constructor手动指向自己:
aobj.constructor = A; //将自己的类赋值给对象的constructor属性
alert(obj.constructor === A) ———–> true;
alert(obj.constructor === B) ———–> false; //基类不会报true了;
prototype–通用方法
alert(Object.prototype.toString.call(test) === ‘[object String]’) -------> true;
- JavaScript--数据类型/判断,== 和 ===区别
- javascript数据类型和判断数据类型
- Java的数据类型以及equals和==的区别
- android之判断:“==”和“equals”区别
- Python判断语句中‘is’和‘==’的区别
- java判断“==”和equals的区别
- java判断==null和isEmpty的区别
- Java数据类型及equals、==区别
- Mybatis的<if>和<choose>的区别 以及“=”判断
- javascript == 判断老是出错
- javascript 中==和===的区别
- javascript 中==和===的区别
- JavaScript中 === 和 == 的区别
- javascript ==和===的区别
- JavaScript中==和===的区别
- javascript中"=="和"==="区别
- JavaScript中==和===的区别
- javascript中==和===的区别
- python调试知识点
- c# 基本值类型及其默认值
- SQL Server 数据库的几种简单查询
- Application Cache API (二)
- Linux——远程文件传送
- JavaScript--数据类型/判断,== 和 ===区别
- Handle用法中Message创建方式:new Message和obtainMessage的区别
- ubuntu16.04为chrome浏览器安装flash插件(Adobe flash play不是最新版本)
- Java Servlet之过滤器
- ubuntu16.04 安装时 busybox-initramfs报错
- D3资料
- android sqlite数据库详解例子
- leetcode7/reverse integer
- webbrowser、requests、Beautiful Soup学习