【JS】《你不知道的JavaScript》 之 类型

内置类型

js中有七种内置类型:

  • null
  • undefined
  • boolean
  • number
  • string
  • object
  • symbol

我们可以用 typeof 运算符来查看值的类型,它返回的是类型的字符串值。

下面我们看看几种特殊情况:

(1)typeof 对 null 的处理有问题:

typeof null === "object"   //true

这是js中的bug,所以我们需要使用复合条件来检测 null 值的类型:

(!null && typeof null === 'object')

(2)function 不是内置类型

typeof function a() {} === 'function'

这样看来,function也像是js的一个内置类型,但是 function 实际上是 object 的一个“子类型”。具体来说,函数是“可调用对象”,它有一个内部属性 [[Call]] ,该属性使其可以被调用。

函数不仅是对象,还可以拥有属性:

function a(b, c) {}
a.length   // 2

函数对象的length属性是其声明的参数个数。

 

undefined 和 undeclared

在作用域中声明但还没有赋值的变量,是 undefined 的。相反,还没有在作用域中声明过的变量,是 undeclared 的。

var a
a   // undefined
b   // b is not defined

但是 typeof 处理 undeclared 的方式却和 undefined 相同。

var a
typeof a   // "undefined"
typeof b   // "undefined"

虽然 b 是一个 undeclared 变量,但是 typeof b并没有报错,这是因为 typeof 有一个特殊的安全防范机制。

接下来我们看看typeof的安全防范机制的实际运用:

// DEBUG在特定环境下才会定义
if (DEBUG) {}   // 会报错
if (typeof DEBUG !== 'undefined') {}   // 安全

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值