js 值和类型

来源:互联网 发布:优品课堂python百度云 编辑:程序博客网 时间:2024/06/06 00:06

javascript中变量没有类型,只有值有类型。变量可以随时持有任何类型的值。

var a = 42;typeof a;//"number"a = true;typeof a;//"boolean"typeof typeof 45;//"string"//变量在未持有值的时候为undefined,即typeof 返回 “undefined”。var a;typeof a;//"undefined"typeof b;//"undefined"a;//undefinedb;//ReferenceError;b is not defined

上面代码中的b为undeclared,没有在作用域中声明过的变量。但是浏览器对他的处理容易让人产生误解,typeof返回“undefined”,值返回is not defined 。这其实因为typeof的一个特殊的安全防范机制。

javascript将undefined和undeclared混为一谈,其实他们是两码事。undefined是值的一种,undeclared表示变量还没有被声明过。但是,有时通过typeof的安全防范机制(阻止报错)来检查全局的undeclared变量也是个不错的办法:

/*DEBUG为全局变量,“调试模式”的开关。在输出调试信息到控制台之前,会检测DEBUG变量是否已被声明   顶层的全局变量声明var DEBUG = true只在debug.js文件中有,只在开发及测试时加载到浏览器      */if(DEBUG){//抛错    console.log("Debugger is begin");}if(typeof DEBUG !== "undefined"){//安全    console.log("Debugger is begin");}//对内建API也有作用if(typeof atob === "undefined"){    atob = function(){/*contenrt*/};}

此外也可用判断全局变量是否是全局对象的属性检查:

/*DEBUG为全局变量,“调试模式”的开关。在输出调试信息到控制台之前,会检测DEBUG变量是否已被声明   顶层的全局变量声明var DEBUG = true只在debug.js文件中有,只在开发及测试时加载到浏览器      *///检查全局变量是否是全局对象的属性,浏览器全局对象是windowif(window.DEBUG){//安全    console.log("Debugger is begin");}if(!window.atob){//安全    // ..}//缺点是全局变量也可以使服务端 node.js


typeof同时也可用于非全局变量的检查以及另外的变量检查方法供参考:
//typeof在非全局变量的应用      function doSomethingCool(){    var helper =         (typeof FeatureA !== "undefined") ?        FeatureA :        function(){/* .. default feature.. */}    var val = helper();}/*其他模块和程序引入doSomethingCool()时。此函数会检测变量FeatureA是否已经在宿主    程序中定义过;是,就用现成的,否则自己定义*/
//一个立即执行函数表达式(LIFE)(function(){    function FeatureA(){/*.. my A feature..*/}    //包含doSomethingCool(..)    function doSomethingCool(){         var helper =             (typeof FeatureA !== "undefined") ?            FeatureA :            function(){/* .. default feature.. */}        var val = helper();    }    doSomethingCool();})();/*这里FeatureA并不是全局变量,但是还是可以用typeof安全防范机制做检查,因为这里没有全局对象可用    下面是另一种方法:“依赖注入”设计模式*/function doSomethingCool(FeatureA){    var helper = FeatureA ||        function(){/*default feature*/}    var val = helper();}


0 0
原创粉丝点击