JavaScript:扩展 Array.prototype 有什么危险?

2024-04-06

谷歌 JavaScript 风格指南建议不要延长Array.prototype https://google.github.io/styleguide/jsguide.html#disallowed-features-modifying-builtin-objects。 不过,我用过Array.prototype.filter = Array.prototype.filter || function(...) {...}作为在不存在的浏览器中拥有它(和类似方法)的一种方式。 MDN实际上提供了类似的例子 https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/filter#Compatibility.

我知道Object.prototype问题,但是Array不是哈希表。

延期时可能会出现哪些问题Array.prototype这让谷歌提出反对?


大多数人都没有抓住这一点。 Polyfilling 或 shimming 标准功能,例如Array.prototype.filter以便它可以在旧版浏览器中运行is我认为这是个好主意。不要听那些仇恨者的胡言乱语。 Mozilla 甚至在 MDN 上向您展示了如何执行此操作。通常建议不要延长Array.prototype或其他本机原型可能归结为以下之一:

  1. for..in可能无法正常工作
  2. 其他人可能也想使用相同的函数名扩展 Array
  3. 即使使用填充程序,它也可能无法在每个浏览器中正常工作。

以下是我的回复:

  1. 你不需要使用for..in通常在数组上。如果你这样做你可以使用hasOwnProperty以确保它是合法的。
  2. 仅当您知道自己是唯一这样做的人时才扩展本机OR当它是标准的东西时Array.prototype.filter.
  3. 这很烦人并且咬了我。旧版 IE 有时在添加此类功能时会出现问题。您只需要根据具体情况看看它是否有效。对我来说,我遇到的问题是添加Object.keys到 IE7。它似乎在某些情况下停止工作。你的旅费可能会改变。

查看这些参考资料:

  • http://perfectionkills.com/extending-native-builtins/ http://perfectionkills.com/extending-native-builtins/
  • http://blip.tv/jsconf/jsconf2011-andrew-dupont-everything-is-permissed-extending-built-ins-5211542 http://blip.tv/jsconf/jsconf2011-andrew-dupont-everything-is-permitted-extending-built-ins-5211542
  • https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/filter https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/filter
  • https://github.com/kriskowal/es5-shim https://github.com/kriskowal/es5-shim

祝你好运!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaScript:扩展 Array.prototype 有什么危险? 的相关文章

随机推荐

  • 找不到模块“socket.io/node_modules/redis”

    当尝试做的时候 var redis require socket io node modules redis 我收到错误 找不到模块 socket io node modules redis 我不明白为什么 我正在运行 Windows 并运
  • 如何在 PHP 中格式化 DOM 结构?

    我的第一个猜测是PHP DOM 类 https www php net dom 与格式输出 https www php net manual en class domdocument php domdocument props format
  • 应用程序在 App Engine 中部署后不会更新

    我刚刚开始接触GAE 一路上已经遇到了问题 当我部署应用程序时 它似乎没有更新它 当我在浏览器中运行它时 它仍然运行旧版本 我的简单代码是 import java io IOException import javax servlet ht
  • WPF:如何使 HeaderedContentControl.Content 适合高度?

    我有一个处于最大化模式的表单 该表单内包含一个 HeaderContentControl 在 HeaderContentControl Content 中 我添加了一个 DockLayout 但问题是 DockLayout 不适合表单高度
  • 为什么我的 JavaScript 代码收到“请求的资源上不存在‘Access-Control-Allow-Origin’标头”错误,而 Postman 却没有?

    Mod note 这个问题是问为什么XMLHttpRequest fetch ETC 浏览器上的受相同访问策略限制 您会收到提及 CORB 或 CORS 的错误 而 Postman 则不受此限制 这个问题是not关于如何修复 No Acce
  • 通过 LinkedList 实现撤消/重做功能

    我正在编写自己的 魔方 应用程序 主要班级Cube有18种旋转方式 RotateAxisXClockWise RotateAxisXAntiClockWise 顺时针旋转轴 Y 逆时针旋转轴 Y RotateAxisZClockWise R
  • 单击按钮后更改键盘布局

    我正在开发一个 Android 应用程序 并且我有一个EditText和一个二RadioButtons A and B 我想做的是 When RadioButtonA 已选中 我想更改键盘布局以使用 完成 按钮显示它 当 的时候RadioB
  • 设置电子邮件正文 HTML 格式

    我将如何让正文以 HTML 格式工作 我需要添加什么以及我需要添加哪一行 我试过 MailMessage IsBodyHtml true 但这对我不起作用 这是这样做的方法吗 该代码应该替换另一行还是应该单独占一行 using System
  • 有没有简单的方法可以在 C# 中创建方法并动态设置其主体?

    我将方法体保存在字符串中 我想动态创建方法 但我不知道 如何设置它的身体 我看到使用 CodeDom 的方式非常乏味 我看到使用 Emit 和操作码 有什么方法可以使用字符串变量中的现成代码吗 string method body retu
  • 使用 $ 和字符值动态选择数据框列

    我有一个由不同列名组成的向量 我希望能够循环每个列名以从 data frame 中提取该列 例如 考虑数据集mtcars以及一些存储在字符向量中的变量名称cols 当我尝试从中选择一个变量时mtcars使用动态子集cols 这些工作都不是
  • 主窗口关闭时 QWidget 不会关闭

    我正在尝试创建一个主窗口 QWidget 当单击按钮时它会打开一个新的 QWidget 但是当我关闭主窗口时 最近打开的 QWidget 不会关闭 main cpp QApplication a argc argv MainWindow w
  • 有没有 recaptcha v2 关闭事件?

    我用这样的代码渲染 grecaptcha let callback const p new Promise resolve gt callback result gt resolve result grecaptcha render el
  • 使用 SQL Server CTE 扁平化层次结构系列

    寻找 SQL Server CTE 示例来创建层次结构 以便我可以输出所有系列 例如展平每个层次结构 例如 在家谱中 如果根从祖父母开始 我需要每个家庭成员的层次结构列表 其中包含成员详细信息 父母的行详细信息 喜欢 child1 row
  • 模型绑定下拉选择值

    我有一个模型 该模型有一个public List
  • 使用 Python 捕获 Mac OS X 系统音频输出

    我一直在尝试使用 劫持 Mac OS X 系统音频PyAudio http people csail mit edu hubert pyaudio 并在Python中保存为wav 也就是说 我不想从麦克风等输入设备进行录制 我想获取任何或所
  • 如何防止 Visual Studio 或 Docker 更改主机端口号?

    我已经对我的 Web 应用程序进行了 Docker 化 并且可以在 Visual Studio 中运行它 但是 它选择使用的主机端口号并不一致 在哪里将其配置为始终使用相同的端口号 我发现我可以通过编辑来做到这一点launchSetting
  • GC.Collect()

    好吧 我已经读过几个有关它的主题 但就这样吧 假设我有一个应用程序 基本上我会时不时地单击一个按钮 几分钟内会发生很多事情 然后它可能会再空闲一个小时 或者可能只是一分钟 在这一切结束之后 调用 GC Collect 不是一个很好的情况吗
  • Java EE、EJB 文件处理

    我正在开发一个网络应用程序 允许用户上传图片 然后系统将为他们生成拇指 我的问题依赖于这样一个事实 EJB 可以分布在多个服务器上 因此不允许直接处理文件 我可以将图像存储在数据库中 但我希望将它们作为文件存储在其中一台服务器中 我怎样才能
  • 将 Primefaces Jar 3.3 替换为 4.0 后,primefaces 计划事件颜色不起作用

    我使用 primefaces 4 0 并尝试更改 Primefaces Lazy Schedule 中事件的颜色 因此我有以下 xhtml 代码
  • JavaScript:扩展 Array.prototype 有什么危险?

    谷歌 JavaScript 风格指南建议不要延长Array prototype https google github io styleguide jsguide html disallowed features modifying bui