总结JavaScript——数据类型

JavaScript六种数据类型

js的弱类型特性

var num =32;
num = "this is a string";

在这个表达式里,有如下结果:

 32+32     // 64
"32" +32   // "3232"
"32"-32    // 0

我们将一些比较基础的js数据类型称为“原始类型”:

  • number
  • string
  • boolean
  • null
  • undefined

剩下的一种叫“对象类型”:

  • object [如Function、Array、Date…]

JavaScript隐式转换

 //这里+可以看作是字符串拼接
var x=' The answer is ' + 42;          
var y =42 + 'is the answer' ;
// 这里的+ -看作是加减法运算符
"37" - 7 // 30
"37" + 7 //37

巧用+/-规则转换类型,实际上是根据不同的类型做不同的操作。

JavaScript中的运算符有很多,比如:

  • “1.23” == 1.23
  • 0 == false
  • num == undefined
  • new Object() == new Object()
  • [1,2] == [1,2]

搞清楚这个逻辑,对JavaScript的入门也很重要。

我们来看看严格等于的逻辑:a===b

严格等于顾名思义,首先判断等号两边的类型

  • 如果类型不同,返回false,不需要进行下去了
  • 如果类型相同:尝试类型转换和比较。如,null == undefined相等,number == string 转number,boolean == ? 转number,object == number | string 尝试对象转为基本类型

JavaScript包装对象

var srt = "string"; // str为基本类型
var srtObj = new String ("string") // strObj为对象类型

JavaScript中有一个比较隐藏的机制:当把一个基本类型尝试以对象的方式去使用的时候,JavaScript会将这个基本类型转化为包装对象,完成这个过程,这个临时对象就会被销毁掉,所以下面的代码中会返回undefined

var a = "string";
alert(a.length); //6
a.t = 3;
alert(a.t);  // undefined

JavaScript类型检测

在js中检测类型的方法有很多,比如说:

  • typeof
  • instanceof
  • Object.prototype.toString
  • constructor
  • duck type

关于typeof:适合基本类型及function检测,遇到null失效

type 100 返回 “number ”
type true 返回 “boolean ”
type function 返回 “function ”
type [1,2] 返回 “object ”
type NaN 返回 “number ”
type null 返回 “object ”

为什么typeof null === “object” ?

这其实是一个历史的原因,事实上在标准规范中尝试过让它返回的结果为null这样一个字符串,但这会导致大量的网站无法访问。

关于obj instanceof Object:适合自定义对象,也可以用来检测原生对象,在不同iframe和window间检测时失效

判断左操作数的对象的原型链上是否有右边这个构造函数的type属性

  • [1,2] instanceof Array === true
  • new Object() instanceof Array === false

关于Object.prototype.toString

  • Object.prototype.toString.apply([]);=== “[object Array]”;
  • Object.prototype.toString.apply(function(){}); === “[object Function]”;
  • Object.prototype.toString.apply(null);=== “[object Null]”

关于constructor、duck type

constructor会指向构造这个对象的构造函数,由于constructor可以被改写,所以使用的时候要小心。

猜你喜欢

转载自blog.csdn.net/weixin_42224055/article/details/106594118