js的属性赋值undefined和delete删除属性的不同点

两者的不同

两者最大的不同在于:赋值undefined的话,属性还存在,还能被for in遍历到,而delete的属性无法被for in遍历到,相当于这个属性从来没有存在过(不然delete叫delete好意思嘛?)。

var obj = {a: 1};

for(var attr in obj){
  console.log(attr); // a
}

obj.a = undefined; // or null

for(attr in obj){
  console.log(attr); // a
}

delete obj.a;

for(attr in obj){
  console.log(attr); // nothing!
}

IE8下的一个delete的bug

// Known issue: Will throw 'Uncaught ReferenceError: callback_*** is not defined' error if request timeout
function clearFunction(functionName) {
    // IE8 throws an exception when you try to delete a property on window
    // http://stackoverflow.com/a/1824228/751089
    try {
        delete window[functionName];
    } catch (e) {
        window[functionName] = undefined;
    }
}

本文来自投稿,不代表星辰博客立场,如若转载,请注明出处:http://www.z88j.com/359.html

(12)
打赏 微信扫一扫 微信扫一扫
上一篇 2021年8月10日 下午2:59
下一篇 2021年8月12日 下午5:16

相关推荐

发表回复

登录后才能评论

Warning: error_log(/www/wwwroot/www.z88j.com/wp-content/plugins/spider-analyser/#log/log-1921.txt): failed to open stream: No such file or directory in /www/wwwroot/www.z88j.com/wp-content/plugins/spider-analyser/spider.class.php on line 2900