为什么在枚举属性/函数时键长度不准确

Why is key.length not accurate when enumerating properties/functions

本文关键字:不准确 函数 枚举 属性 为什么      更新时间:2023-09-26

我在对象中有以下toString方法:

/**
         * @method toString
         * @public
         */
        toString: function () {
            var toString = "toString: ";
            for (key in this) {
                if (this.hasOwnProperty(key))   {
                    console.log(key);
                    console.log(this[key].length);
                    if(this[key].length < 50)   {
                toString +=key + ": " + this[key] + " 't ";
                    }
                }
            }
            return toString;
        }

为什么我的函数(主体超过 50 个字符)返回长度为 2/3?

编辑:我正在尝试获取属性值的长度以将它们划分为属性和函数。

edit2:由于函数对象的长度返回参数的#,有没有其他方法可以在JS中划分属性和函数?

对于函数对象,length 属性表示其形式参数(函数期望的参数)的总数。例如:

var foo = function(a) {};
foo.length; // 1

请注意Function.lengtharguments.length之间的区别:

var bar = function(a, b) { 
  console.log(bar.length); 
  console.log(arguments.length); 
};
bar(42);

这将在第一行记录2(因为形式参数的数量是给定函数的常量值),但在第二行中1(因为bar仅在此处使用单个参数调用)。


由于函数对象的长度返回参数的 #,因此 还有另一种方法可以在JS中划分属性和函数吗?

当然:只需检查属性的类型:

if (typeof this[key] === 'function') { ... }