js 遍历 object 属性和值的方法

本文介绍了一种用于遍历JavaScript对象属性及其值的方法,包括处理字符串类型和非字符串类型的逻辑。
国外网站上 js 遍历 object 属性和值的方法
function( o, maxLevel, level ) {
    if ( typeof level == "undefined" ) {
        level = 0;
    }
    if ( typeof level == "undefined" ) {
        maxLevel = 0;
    }

    var str = '';
    // Remove this if you don't want the pre tag, but make sure to remove
    // the close pre tag on the bottom as well
    if ( level == 0 ) {
        str = '<pre>';
    }

    var levelStr = '';
    for ( var x = 0; x < level; x++ ) {
        levelStr += '    ';
    }

    if ( maxLevel != 0 && level >= maxLevel ) {
        str += levelStr + '...</br>';
        return str;
    }

    for ( var p in o ) {
        if ( typeof o[p] == 'string' ) {
            str += levelStr +
                p + ': ' + o[p] + ' </br>';
        } else {
            str += levelStr +
                p + ': { </br>' + print( o[p], maxLevel, level + 1 ) + levelStr + '}</br>';
        }
    }

    // Remove this if you don't want the pre tag, but make sure to remove
    // the open pre tag on the top as well
    if ( level == 0 ) {
        str += '</pre>';
    }
    return str;
};
</pre><pre code_snippet_id="515740" snippet_file_name="blog_20141111_2_4562501" name="code" class="html">20:48:20
烟飞烟散 2014/11/11 20:48:20
function printAllObject( o, maxLevel, level ) {
    if ( typeof level == "undefined" ) {
        level = 0;
    }
    if ( typeof level == "undefined" ) {
        maxLevel = 0;
    }

    var str = '';
    // Remove this if you don't want the pre tag, but make sure to remove
    // the close pre tag on the bottom as well
    if ( level == 0 ) {
        str = '';
    }

    var levelStr = '';
    for ( var x = 0; x < level; x++ ) {
        levelStr += ' ';
    }

    if ( maxLevel != 0 && level >= maxLevel ) {
        str += levelStr + '...';
        return str;
    }

    for ( var p in o ) {
        if ( typeof o[p] == 'string' ) {
            str += levelStr +
                p + ':' + o[p] + '';
        } else {
            str += levelStr +
                p + ': { ' + printAllObject( o[p], maxLevel, level + 1 ) + levelStr + '}';
        }
    }

    // Remove this if you don't want the pre tag, but make sure to remove
    // the open pre tag on the top as well
    if ( level == 0 ) {
        str += '';
    }
    return str;
};

<pre name="code" class="javascript">function printAllObject( o, maxLevel, level ) {
    if ( typeof level == "undefined" ) {
        level = 0;
    }
    if ( typeof level == "undefined" ) {
        maxLevel = 0;
    }

    var str = '';
    // Remove this if you don't want the pre tag, but make sure to remove
    // the close pre tag on the bottom as well
    if ( level == 0 ) {
        str = '';
    }

    var levelStr = '';
    for ( var x = 0; x < level; x++ ) {
        levelStr += '    ';
    }

    if ( maxLevel != 0 && level >= maxLevel ) {
        str += levelStr + '\n';
        return str;
    }

    for ( var p in o ) {
        if ( typeof o[p] == 'string' ) {
            str += levelStr +
                p + ': ' + o[p] + ' \n';
        } else {
            str += levelStr +
                p + ': { </br>' + print( o[p], maxLevel, level + 1 ) + levelStr + '}\n';
        }
    }

    // Remove this if you don't want the pre tag, but make sure to remove
    // the open pre tag on the top as well
    if ( level == 0 ) {
        str += '';
    }
    return str;
  }


 


来自:http://stackoverflow.com/questions/957537/how-can-i-print-a-javascript-object



### JavaScript遍历对象属性及其 #### 使用 `for...in` 语句 此方法可以用来枚举对象自身的可枚举属性以及继承的可枚举属性。需要注意的是,它不仅会迭代对象本身的属性,还会迭代原型链上的可枚举属性。 ```javascript const obj = { name: "Alice", age: 25, }; for (let key in obj) { if (obj.hasOwnProperty(key)) { // 这里确保只处理对象自身的属性 console.log(`${key}: ${obj[key]}`); } } ``` 这段代码展示了如何通过 `hasOwnProperty()` 来过滤掉来自原型链上的属性[^1]。 #### 利用 `Object.keys()`, `Object.values()`, `Object.entries()` 这些静态方法返回的对象表示形式使得我们可以更容易地操作数据结构: - `Object.keys(obj)` 返回一个由给定对象自身所有可枚举属性组成的数组。 - `Object.values(obj)` 类似于前者但是返回的是属性而不是键名。 - `Object.entries(obj)` 同时提供键相应的作为二维数组的形式。 对于遍历并打印每个属性与其对应的情况,推荐使用 `Object.entries()`: ```javascript const person = new Map([ ["name", "Bob"], ["age", 30], ]); // 如果是普通对象则不需要转换成Map if (!person instanceof Map){ const entries = Object.entries(person); for (let [key, value] of entries) { console.log(`${key} -> ${value}`); } }else{ for (let [key,value] of person){ console.log(`${key} -> ${value}`); } } ``` 这里展示了一个例子,其中既考虑到了常规对象也考虑到特殊情况下的映射(Map)[^2]. #### 反射机制的应用 JavaScript 的反射特性允许动态访问或修改程序内部状态的能力,在某些场景下非常有用。例如,可以通过 `Reflect.has(target, propertyKey)` 或者 `target[propertyKey] !== undefined` 来判断某个特定属性是否存在;而要获取所有的自有属性(包括不可枚举),还可以借助 `Object.getOwnPropertyNames(object)` 函数[^3]: ```javascript function reflectProperties(obj) { let keys = Reflect.ownKeys(obj); keys.forEach((key)=>{ console.log(`Property Name:${String(key)}, Value:${obj[String(key)]}`); }); } reflectProperties({a:1,b:"two"}); ``` 以上就是几种常见的用于遍历 JavaScript 对象属性的方式,并附带了一些实用的例子说明。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值