为什么判断arg in cache比测试类型不是undefined更安全

当需要判断一个参数是否在对象中时,为什么使用

arg in cache

会比使用

cache[arg] != undefined

更安全呢,我看网上有人说因为undefined是一个有效的返回值,但还是不太理解,有人能解答一二吗?

阅读 2.7k
4 个回答
var oCache = {x : null},vArg = 'x';
    console.log(vArg in oCache ? '有x属性' : '没x属性'); // 有x属性
    console.log(oCache[vArg] != undefined ? '有x属性' : '没x属性'); // 没x属性

in操作符可以用来判断对象是否为数组/对象的元素/属性:
当“对象”为数组时,“变量”指的是数组的“索引”;
当“对象”为对象是,“变量”指的是对象的“属性”。

b={a:undefined}; b.a === undefined;

其实 undefined和null都支持in操作,使用in不会出现空指针异常

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题