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;
0 0
原创粉丝点击