JavaScript对象遍历 与 function item() {[native code]}

本文探讨了JavaScript对象遍历过程中遇到的问题,特别是`[native code]`的含义。指出`for in`循环会遍历包括继承属性在内的所有属性,而`Object.keys()`仅返回对象自身的属性。在特定情况下,对象转化为字符串会显示`function item() {[native code]}:undefined`。建议使用`Object.keys(obj).forEach()`进行安全的遍历,并注意操作符可能导致的隐式类型转换。在Vue源码中,利用`[native code]`可以识别Proxy的构造函数是否为原生。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先引出问题

问题代码部分

var temp = '';
var taskscreen = {}
.....
for(var item in taskscreen){
    if(taskscreen[item]!=''&&taskscreen[item]!='-万'&&taskscreen[item]!='至'&&taskscreen[item]!='-人'&&taskscreen.hasOwnProperty(item)){
        if(temp==''){
            temp=item+':'+taskscreen[item];
        }
        else {
            temp=temp+';'+item+':'+taskscreen[item];
        }
    }
}

最后生成的temp 为   function item() {[native code]}:undefined

[native code]表示浏览器底层实现的c++机器语言代码

for in 在遍历对象包含继承和自身属性,继承属性就有函数引用,

对象在转化为字符串事就是   function item() {[native code]}:undefined

在浏览器中进行如下打印,就会发现问题所在

问题代码中 item+':'进行隐式转换,

 item+':' === item.toString()+':'   //true

Object.keys(obj)返回obj自身属性的一个数组

本问题总结

  1. 时刻注意操作符在背后做的事情
  2. 推荐使用Object.keys(obj).forEach()遍历对象
  3. 对象遍历缺乏类型判断
  4. 在Vue源码中通过native code 判断Proxy的构造函数是否是原生的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值