前端JavaScript基础训练系列八十八:JavaScript 有 七 种 内 置 类 型

文章探讨了开发人员在处理JavaScript跨环境编程时如何避免使用window全局对象,通过typeof检查变量存在性以及依赖注入设计模式。还强调了JavaScript中undefined与undeclared的区别,以及typeof在防止ReferenceError上的应用。
摘要由CSDN通过智能技术生成

一些开发人员不喜欢通过 window 来访问全局对象,尤其当代码需要运行在多种 JavaScript 环境中时(不仅仅是浏览器,还有服务器端,如 node.js 等),因为此时全局对象并非总是 window。
从技术角度来说,typeof 的安全防范机制对于非全局变量也很管用,虽然这种情况并不多 见,也有一些开发人员不大愿意这样做。如果想让别人在他们的程序或模块中复制粘贴你 的代码,就需要检查你用到的变量是否已经在宿主程序中定义过:

   function doSomethingCool() {
         var helper =
             (typeof FeatureXYZ !== "undefined") ?
             FeatureXYZ :
             function() { /*.. default feature ..*/ };
         var val = helper();
// .. }

其他模块和程序引入 doSomethingCool() 时,doSomethingCool() 会检查 FeatureXYZ 变量是 否已经在宿主程序中定义过;如果是,就用现成的,否则就自己定义:

// 一个立即执行函数表达式(IIFE,参见《你不知道的JavaScript(上卷)》“作用域和闭包” // )
(function(){
         function FeatureXYZ() { /*.. my XYZ feature ..*/ }
// 包含doSomethingCool(..) function doSomethingCool() {
             var helper =
                 (typeof FeatureXYZ !== "undefined") ?
                 FeatureXYZ :
                 function() { /*.. default feature ..*/ };
             var val = helper();
// .. }
         doSomethingCool();
     })();

这里,FeatureXYZ 并不是一个全局变量,但我们还是可以使用 typeof 的安全防范机制来做 检查,因为这里没有全局对象可用(像前面提到的 window.___)。
还有一些人喜欢使用“依赖注入”(dependency injection)设计模式,就是将依赖通过参数 显式地传递到函数中,如:


function doSomethingCool(FeatureXYZ) {
         var helper = FeatureXYZ ||
             function() { /*.. default feature ..*/ };
         var val = helper();
         // ..
}

上述种种选择和方法各有利弊。好在 typeof 的安全防范机制为我们提供了更多选择。

JavaScript 有 七 种 内 置 类 型:null、undefined、boolean、number、string、object 和
symbol,可以使用 typeof 运算符来查看。 变量没有类型,但它们持有的值有类型。类型定义了值的行为特征。
很多开发人员将 undefined 和 undeclared 混为一谈,但在 JavaScript 中它们是两码事。 undefined 是值的一种。undeclared 则表示变量还没有被声明过。
遗憾的是,JavaScript 却将它们混为一谈,在我们试图访问 “undeclared” 变量时这样报 错:ReferenceError: a is not defined, 并 且 typeof 对 undefined 和 undeclared 变 量 都 返 回 “undefined”。
然而,通过 typeof 的安全防范机制(阻止报错)来检查 undeclared 变量,有时是个不错的 办法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值