Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么时候javascript函数不是对象? 我看到下面的行为,在JavaScript调试会话的中间: o // function (a1, a2, a3) { return a1 + a2 + a3; } typeof(o) //'function' for (var n in o) { console.log(n); } //<a list of properties> Object.keys(o) //TypeError: not an object Object.prototype.toString.call(o); //"[object Function]"_Javascript_Google Chrome - Fatal编程技术网

什么时候javascript函数不是对象? 我看到下面的行为,在JavaScript调试会话的中间: o // function (a1, a2, a3) { return a1 + a2 + a3; } typeof(o) //'function' for (var n in o) { console.log(n); } //<a list of properties> Object.keys(o) //TypeError: not an object Object.prototype.toString.call(o); //"[object Function]"

什么时候javascript函数不是对象? 我看到下面的行为,在JavaScript调试会话的中间: o // function (a1, a2, a3) { return a1 + a2 + a3; } typeof(o) //'function' for (var n in o) { console.log(n); } //<a list of properties> Object.keys(o) //TypeError: not an object Object.prototype.toString.call(o); //"[object Function]",javascript,google-chrome,Javascript,Google Chrome,对象.keys执行的第一步是: 如果类型(O)不是Object,则抛出一个TypeError异常 由于您遇到了这样的错误,我相信您的对象必须是主机对象,如上面的Bergi所示。尽管如此,Object.prototype.toString.call(o)还是给出了“[Object Function]”,这很奇怪,因为 *有关类型(x)的含义,请参阅规范的最后一句。当您看到类似的内容时,您可以尝试: console.log(Object.keys) 或同等产品 (如果您可以找到浏览器键的原始实现,

对象.keys执行的第一步是:

  • 如果类型(O)不是Object,则抛出一个TypeError异常
  • 由于您遇到了这样的错误,我相信您的对象必须是主机对象,如上面的Bergi所示。尽管如此,
    Object.prototype.toString.call(o)
    还是给出了“[Object Function]”,这很奇怪,因为


    *有关
    类型(x)
    的含义,请参阅规范的最后一句。

    当您看到类似的内容时,您可以尝试:

    console.log(Object.keys)
    
    或同等产品

    (如果您可以找到浏览器键的原始实现,请比较并确保其与您看到的相同)

    (如果看到此类问题,请阅读对该问题的评论,以了解更多需要了解的内容)


    虚惊一场。功能总是对象,Chrome的人知道如何制作虚拟机

    我跑

    找到了一个Object.keys被覆盖的地方,带有一个buggy函数


    相关代码正在动态加载,因此我没有看到它在浏览器中被显式加载。

    请重新构建
    o
    的来源-可能是有缺陷的主机对象。但是,如果这是不可复制的,那么这个问题就没用了。您没有使用覆盖
    对象.键的ES5垫片,尽管它存在,但是类型检查是错误的(使用
    typeof
    )?“很明显,有时函数不是对象…”不,没有可复制的测试,这是不清楚的部分哈哈哈。这是“Object.keys”的自定义实现!我要去砸砖头了。@Bergi很早以前就值得表扬了。另外,请看这个问题:@user2736012我不是说它不能在宿主对象上工作(例如,它在Chrome中的文档和窗口上工作)。我的第一个版本不正确,规范说类型必须是Object,否则会抛出错误。@奇怪的不是,因为15.2.4.2步骤4使用了
    [[Class]]]
    ,但部分说:
    主机对象的[[Class]]内部属性的值可以是除“参数”、“数组”、“布尔”、“日期”、“错误”之外的任何字符串值,“函数”、“JSON”、“数学”、“数字”、“对象”、“RegExp”和“字符串”
    。因此,不应该
    [对象函数]
    主机对象不符合规范吗?@bfavaretto还有更多:每次他们谈论主机/本机对象时,都会清楚地说明这一点,例如:。在这里,他们甚至区分了相同的条件:对不起,这是对ECMAScript的过度解释,我必须给出-1。它甚至不需要从
    对象继承。p旋转类型
    。这将起作用:
    Object.keys(Object.create(null))
    干得好。我建议你把这个问题和所有的答案/评论一起留下。这里有很多有趣的知识。无论你有什么代码动态加载了一个被破坏的
    对象覆盖。需要从你的代码库中删除键
    ,然后给开发人员一封电子邮件,建议他们在自己的位置申请工作cal car wash..@user2736012它在我的待办事项列表中…一次只做一件事:P…但是+1用于深入研究问题。回想起来,一个
    console.log(Object.keys)
    将是一个很好的建议。
    console.log(Object.keys)
    
    grep -r "Object.defineProperty(" *
    
    grep -r "Object.defineProperties(" *