Angular提供了几个辅助函数:
每个都有本机实现。例如,String.prototype.toLowerCase()自ECMAScript First Edition以来就已存在。为什么Angular提供这种看似冗余的功能?
答案 0 :(得分:4)
如果你深入研究Angular的代码库,你会发现angular.js中定义的效用函数经常使用。虽然角度公用事业函数集中的某些函数定义似乎相当多余,但以这种方式定义它们有一些好处:
angular.forEach
:
- 与ES262的Array.prototype.forEach不同,
- 提供未定义的'或者' null'
obj
的值不会抛出TypeError,而只是返回提供的值。var values = {name: 'misko', gender: 'male'}; var log = []; angular.forEach(values, function(value, key) { this.push(key + ': ' + value); }, log); expect(log).toEqual(['name: misko', 'gender: male']);
*
类型验证调用(例如angular.isDate
)可以替换为其定义表达式toString.call(value) === '[object Date]'
,而不会有太大的麻烦,但只需angular.isDate
这样的单个函数调用就会更流畅与代码库的其他部分的接口。
即。表达
if (angular.isDate(value)) { /* do work */ }
比其对应
更容易阅读和理解 if (toString.call(value) === '[object Date]') { /* do work */ }
集中实现其实用程序功能还允许Angular to easily test这些函数,以确保它们在不同的浏览器实现中按预期运行。然后,Angular代码库的其他部分可以调用这组测试的实用程序函数,从理论上讲,每个调用应该以可预测的方式运行。
我确信还有很多其他原因我没有想到,但您可以随时深入了解代码库以获得更好,更完整的答案:)
答案 1 :(得分:-1)
其中一些在JavaScript 1.5中是不存在的,其他是本机函数的包装。
例如,lowercase是String.prototype.toLowerCase()
的包装,可以在非字符串对象上调用异常。