for-in 循环将遍历对象的所有可枚举属性,甚至是原型(prototype)链中的属性。 hasOwnProperty 函数可以过滤掉原型(prototype)链中的那些可枚举属性。最后,propertyIsEnumerable 函数可以区分对象的可枚举属性。
因此,以下脚本不应打印任何内容:
for(a in window)
if(window.hasOwnProperty(a) && !window.propertyIsEnumerable(a))
console.log(a);
然而,在 Chrome 上,上面的代码会打印很多属性名称。
为什么 for-in 循环和 propertyIsEnumerable 在可枚举方面相互矛盾?
最佳答案
可悲的是,JavaScript 引擎并不相同。虽然符合 ES5 的引擎将尽职尽责地尊重其属性的可枚举性,但正如上面的 pimvdb 和 Felix 所指出的,window 是一个宿主对象,并且不受制于 ES5 的规则。
您可以在 window.constructor 中看到更多关于 window 对象的证据,这将显示它是从
function Window() { [native code] }
因此,我们没有真正的方法来确定为什么某些属性是可枚举的(根据 Chrome),而其他属性不是来自 JavaScript 运行时。
但是,根据 its MDN article,您仍然可以通过查看 Object.keys(window) 来查看 Chrome 不一致的 window 可枚举属性的完整状态。 , “返回在给定对象上找到的所有自己的可枚举属性的数组。”
这样做仍然会返回一个包含 30 多个属性的数组。将其归因于 Chrome 的陌生性!
编辑:通过一些进一步的测试,我找到了让 Chrome 浏览器理解 window 的可枚举属性的正确方法
Object.keys(window).filter(function(prop) {
return window.hasOwnProperty(prop) && !window.propertyIsEnumerable(prop);
});
在 Chrome 中,for...in 枚举的候选属性列表似乎不是 Object.keys 返回的内容,但实际上很多更接近于列出可枚举和不可枚举属性的 Object.getOwnPropertyNames。然而,即使这样也是不一致的。 window.hasOwnProperty(prop) && !window.propertyIsEnumerable(prop) 的属性列表对于 for...in 和 为 423 和 454 Object.getOwnPropertyNames,分别在我的测试中。
关于javascript - 不可枚举的属性出现在 Chrome 的 for...in 循环中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12146473/
我正在尝试测试是否存在表单。我是Rails新手。我的new.html.erb_spec.rb文件的内容是:require'spec_helper'describe"messages/new.html.erb"doit"shouldrendertheform"dorender'/messages/new.html.erb'reponse.shouldhave_form_putting_to(@message)with_submit_buttonendendView本身,new.html.erb,有代码:当我运行rspec时,它失败了:1)messages/new.html.erbshou
在rails源中:https://github.com/rails/rails/blob/master/activesupport/lib/active_support/lazy_load_hooks.rb可以看到以下内容@load_hooks=Hash.new{|h,k|h[k]=[]}在IRB中,它只是初始化一个空哈希。和做有什么区别@load_hooks=Hash.new 最佳答案 查看rubydocumentationforHashnew→new_hashclicktotogglesourcenew(obj)→new_has
我看到这个错误:translationmissing:da.datetime.distance_in_words.about_x_hours我的语言环境文件:http://pastie.org/2944890我的看法:我已将其添加到我的application.rb中:config.i18n.load_path+=Dir[Rails.root.join('my','locales','*.{rb,yml}').to_s]config.i18n.default_locale=:da如果我删除I18配置,帮助程序会处理英语。更新:我在config/enviorments/devolpment
我希望我的UserPrice模型的属性在它们为空或不验证数值时默认为0。这些属性是tax_rate、shipping_cost和price。classCreateUserPrices8,:scale=>2t.decimal:tax_rate,:precision=>8,:scale=>2t.decimal:shipping_cost,:precision=>8,:scale=>2endendend起初,我将所有3列的:default=>0放在表格中,但我不想要这样,因为它已经填充了字段,我想使用占位符。这是我的UserPrice模型:classUserPrice回答before_val
我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah
我想向我的Controller传递一个参数,它是一个简单的复选框,但我不知道如何在模型的form_for中引入它,这是我的观点:{:id=>'go_finance'}do|f|%>Transferirde:para:Entrada:"input",:placeholder=>"Quantofoiganho?"%>Saída:"output",:placeholder=>"Quantofoigasto?"%>Nota:我想做一个额外的复选框,但我该怎么做,模型中没有一个对象,而是一个要检查的对象,以便在Controller中创建一个ifelse,如果没有检查,请帮助我,非常感谢,谢谢
我有一个具有一些属性的模型:attr1、attr2和attr3。我需要在不执行回调和验证的情况下更新此属性。我找到了update_column方法,但我想同时更新三个属性。我需要这样的东西:update_columns({attr1:val1,attr2:val2,attr3:val3})代替update_column(attr1,val1)update_column(attr2,val2)update_column(attr3,val3) 最佳答案 您可以使用update_columns(attr1:val1,attr2:val2
我已经像这样安装了一个新的Rails项目:$railsnewsite它执行并到达:bundleinstall但是当它似乎尝试安装依赖项时我得到了这个错误Gem::Ext::BuildError:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcheckingforlibkern/OSAtomic.h...yescreatingMakefilemake"DESTDIR="cleanmake"DESTDIR="
我有这个html标记:我想得到这个:我如何使用Nokogiri做到这一点? 最佳答案 require'nokogiri'doc=Nokogiri::HTML('')您可以通过xpath删除所有属性:doc.xpath('//@*').remove或者,如果您需要做一些更复杂的事情,有时使用以下方法遍历所有元素会更容易:doc.traversedo|node|node.keys.eachdo|attribute|node.deleteattributeendend 关于ruby-Nokog
似乎无法为此找到有效的答案。我正在阅读Rails教程的第10章第10.1.2节,但似乎无法使邮件程序预览正常工作。我发现处理错误的所有答案都与教程的不同部分相关,我假设我犯的错误正盯着我的脸。我已经完成并将教程中的代码复制/粘贴到相关文件中,但到目前为止,我还看不出我输入的内容与教程中的内容有什么区别。到目前为止,建议是在函数定义中添加或删除参数user,但这并没有解决问题。触发错误的url是http://localhost:3000/rails/mailers/user_mailer/account_activation.http://localhost:3000/rails/mai