在创建 toLowerCase 函数时,一种方式比另一种方式更好
Is one way better than the other when creating a toLowerCase function?
Angular 为 String.toLowerCase 创建了一个包装函数,因此它可以作为 Angular 方法调用。查看他们的代码 - 想获得有关他们方法的反馈,以及它是否比我看到和使用的其他模式/方法更好。
角路
var lowercase = function(string) {
return isString(string) ? string.toLowerCase : string;
};
lowercase("MYSTRING"); // mystring
另一种方式(我认为会在他们的代码中(
var lowercase = Function.prototype.call.bind(''.toLowerCase);
lowercase("MYSTRING"); // mystring
// notes
// ''.toLowerCase as in String.prototype.toLowerCase
// isString() in 1st function another function in angular
只是煮鸡蛋的方法不止一种......还是它们比第一种方法有什么明显的优势?
煮鸡蛋的方法肯定不止一种,两种解决方案似乎同样"有效",尽管它们并不完全做同样的事情,甚至不能产生相同的输出。
角度解决方案选择仅在输入数据为字符串时尝试小写。我可以看到两个原因。第一个是可能不想浪费时间将其传递给小写函数,如果它不是字符串。第二个是小写的副作用是输出,无论输入如何,都会以字符串的形式返回,也许他们不希望这样。
以以下代码为例,假设上述两个函数之一:
var example = 1;
if (lowercase(example) + 1 === "11") {...}
通过当前的角度方式,这将返回 false (1 + 1 = 2(。通过另一种方式,这将返回 true("1" + 1 = "11"(。
至于这是否是有意的副作用,我不知道。然而,它与人们对原生javascript的期望不一致,在评估该方法是否更有利时,绝对应该考虑这一点。
例
function isString(value) {
return typeof value === 'string';
}
var lowercase1 = function(string) {
return isString(string) ? string.toLowerCase() : string;
};
var lowercase2 = Function.prototype.call.bind(''.toLowerCase);
var tests = ["ExAmPlE", "12345", 67890, "true", true, [1, 2, 3], {win: 1, lose: 0}];
var strings = ['"ExAmPlE"', '"12345"', '67890', '"true"', 'true', '[1, 2, 3]', '{bar: 1}'];
for (var i = 0; i < tests.length; i++) {
var low1 = lowercase1(tests[i]);
var low2 = lowercase2(tests[i]);
$('#test').append('<th>' + strings[i] + '</th>');
$('#ang').append('<td>' + typeof low1 + '</td>');
$('#nat').append('<td>' + typeof low2 + '</td>');
}
table {
border-collapse: collapse;
}
table, th, td {
border: 1px solid black;
}
th, td {
min-width: 60px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<table>
<tr id="test">
<td></td>
</tr>
<tr id="ang">
<th>Angular</th>
</tr>
<tr id="nat">
<th>Native</th>
</tr>
</table>
相关文章:
- Windows8应用程序(html&Javascript):从图片库(除了文件选择器)显示图像的另一种方式
- Angularjs:如何让ui选择只有一种方式的模型竞标
- 单击()的另一种方式
- Rails 以一种方式格式化 DateTime.now 和 DateTime.yesterday 另一种方式 - 我如何
- 另一种方式是Javascript中的函数堆叠
- CSS Div 类之间的转换仅以一种方式发生
- require.js是require的另一种方式
- 在创建 toLowerCase 函数时,一种方式比另一种方式更好
- Ionic 和 Angularjs - 形式绑定似乎只是一种方式
- Javascript hide/show 切换在 Opera 中是双向的,但在其他浏览器中只能以一种方式工作
- 以两种不同的方式编写函数:一种方式会导致 TypeError,另一种方式不会.为什么
- NG-模型似乎只在模态视图内的离子单选按钮上绑定一种方式
- 编写 if 语句的另一种方式
- AngularJS - CSS 动画只能以一种方式工作
- 存储JS变量和画布数据的另一种方式,用户可以稍后检索
- 从以另一种方式编写的输入中返回一个字符串
- 用q创造承诺的另一种方式
- Javascript-切换元素只能用一种方式!还有URL附加所需的帮助
- 是他们的一种方式,我可以将javascript嵌入到GWT代码
- 访问AngularJS隔离作用域的另一种方式