题目
请说明下面语句的输出:
复制代码 代码如下:
x = {shift:[].shift};
x.shift();
console.info(x.length);
如果你回答正确,那么说明你已经了解 Array 函数的泛型应用。在理解这到题目之前,我 我们首先要了解数组(Array)的 shift 定义。
MDC 中已经对相关的说明描述得非常的清楚
复制代码 代码如下:
shift is intentionally generic; this method can be called or
applied to objects resembling arrays. Objects which do not
contain a length property reflecting the last in a series of
consecutive, zero-based numerical properties may not behave
in any meaningful manner.
同时,EMCAScript 中的定义也同时定义了对于 shift 操作对于对象 length 属性的改变, 那么基本上我们可以了解到上题中的答案为
复制代码 代码如下:0
扩散思维
如果对于上面的题目还无法理解,那么我们更清楚的说明 Array.prototype.shift 对对象 的 length 的影响。
复制代码 代码如下:
x = {};
Array.prototype.shift.call(x);
console.info(x.length);
很明显,对于对象如果为定义 length 属性,则 shift 则会自动加上 length 属性并设置 为 0 。
既然已经说到这里,那么下面的题目输出什么留给大家去思考。
复制代码 代码如下:
x = function (a, b, c) {};
Array.prototype.shift.call(x);
console.info(x.length);
重新认识泛型
很明显,上面的题目有可能还是无法说明本篇文章的题目。泛型(Generic)应用其实 期前也说明过,但这里主要说明 Array 方法对于“类数组”的操作使用。
强制转换为数组
复制代码 代码如下:
var args = Array.prototype.slice.call(arguments);
这个用法比较火星,其实期前也用过,详细参见这里。
迭代数据
复制代码 代码如下:
Array.prototype.forEach.call(arguments, function(i) {
console.info(i);
});
如果对象能够被递归,则出了“传统”的 for、while 等语句以外,还可以考虑使用 Array 的 forEach 属性(注意 IE 会是悲剧)。Array 的 forEach 方法详见这里。
其他的 Array 扩展用法可以散发自己的思维,如果对应浏览器的 Array 没有对应的实现方 法,可以参见这里。
其实,不仅仅是 Array 方法,很多浏览器原生对象的方法都是泛型,我们完全可以利用这 这些特性使代码更为的清晰
使用原生方法,效率更高。
请说明下面语句的输出:
复制代码 代码如下:
x = {shift:[].shift};
x.shift();
console.info(x.length);
如果你回答正确,那么说明你已经了解 Array 函数的泛型应用。在理解这到题目之前,我 我们首先要了解数组(Array)的 shift 定义。
MDC 中已经对相关的说明描述得非常的清楚
复制代码 代码如下:
shift is intentionally generic; this method can be called or
applied to objects resembling arrays. Objects which do not
contain a length property reflecting the last in a series of
consecutive, zero-based numerical properties may not behave
in any meaningful manner.
同时,EMCAScript 中的定义也同时定义了对于 shift 操作对于对象 length 属性的改变, 那么基本上我们可以了解到上题中的答案为
复制代码 代码如下:0
扩散思维
如果对于上面的题目还无法理解,那么我们更清楚的说明 Array.prototype.shift 对对象 的 length 的影响。
复制代码 代码如下:
x = {};
Array.prototype.shift.call(x);
console.info(x.length);
很明显,对于对象如果为定义 length 属性,则 shift 则会自动加上 length 属性并设置 为 0 。
既然已经说到这里,那么下面的题目输出什么留给大家去思考。
复制代码 代码如下:
x = function (a, b, c) {};
Array.prototype.shift.call(x);
console.info(x.length);
重新认识泛型
很明显,上面的题目有可能还是无法说明本篇文章的题目。泛型(Generic)应用其实 期前也说明过,但这里主要说明 Array 方法对于“类数组”的操作使用。
强制转换为数组
复制代码 代码如下:
var args = Array.prototype.slice.call(arguments);
这个用法比较火星,其实期前也用过,详细参见这里。
迭代数据
复制代码 代码如下:
Array.prototype.forEach.call(arguments, function(i) {
console.info(i);
});
如果对象能够被递归,则出了“传统”的 for、while 等语句以外,还可以考虑使用 Array 的 forEach 属性(注意 IE 会是悲剧)。Array 的 forEach 方法详见这里。
其他的 Array 扩展用法可以散发自己的思维,如果对应浏览器的 Array 没有对应的实现方 法,可以参见这里。
其实,不仅仅是 Array 方法,很多浏览器原生对象的方法都是泛型,我们完全可以利用这 这些特性使代码更为的清晰
使用原生方法,效率更高。
标签:
Array,prototype
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
狼山资源网 Copyright www.pvsay.com
暂无“Array.prototype 的泛型应用分析”评论...
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。