Dav*_*ing 17 javascript arrays syntax prototype object
我遇到了将Array原型应用于本机对象的两种方法:
arr = Array.prototype.slice.call(obj);
arr = [].slice.call(obj);
Run Code Online (Sandbox Code Playgroud)
以类似的方式,获取类似于本机数组的对象的真实类型:
type = Object.prototype.toString.call(obj);
type = {}.toString.call(obj);
Run Code Online (Sandbox Code Playgroud)
一个简单的测试:
function fn() {
console.log(
Array.prototype.slice.call(arguments),
[].slice.call(arguments),
Object.prototype.toString.call(arguments),
{}.toString.call(arguments)
);
}
fn(0,1);
Run Code Online (Sandbox Code Playgroud)
小提琴:http://jsfiddle.net/PhdmN/
他们看起来和我一模一样; 第一种语法使用得更频繁,但第二种语法肯定更短.使用较短的语法时是否有任何缺点?
Rob*_*b W 25
它们在功能上是相同的.
但是,该Array对象可能会被覆盖,导致第一种方法失败.
//Example:
Array = {};
console.log(typeof Array.prototype.slice); // "undefined"
console.log(typeof [].slice); // "function"
Run Code Online (Sandbox Code Playgroud)
文字方法创建一个新的实例Array(与Array.prototype.方法相对).两种方法的基准:http://jsperf.com/bbarr-new-array-vs-literal/3
当您打算多次使用该方法时,最佳做法是缓存该方法:
var slice = Array.prototype.slice; //Commonly usedvar slice = [].slice;- 如果您担心存在Array,或者您只是喜欢较短的语法.| 归档时间: |
|
| 查看次数: |
4304 次 |
| 最近记录: |