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



我在对象中有以下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') { ... }

最新更新