push方法的兼容性问题

在IE8及以下中,不支持aplly方法中的第二个参数是 伪数组

需要对push方法进行封装。

将 push 的判断,放入一个沙箱中:
好处:在页面加载的时候就会执行这段代码,保证了代码只会检测一次
以后的操作中直接使用调用 push 即可。jquery源码中也是这样封装的,在用jquery操作DOM元素时,不需要考虑此兼容性问题啦
 1 var push = [].push;
 2 try {
 3     // 判断 push 是否可用
 4     var container = document.createElement("div");
 5     container.innerHTML = "<p></p><p></p>";
 6     push.apply([], container.childNodes);
 7 } catch(e) {
 8     // 自己封装push方法
 9     push = {
10         apply: function(target, els) {
11             var j = target.length;
12                 i = 0;
13             while(target[j++] = els[i++]) {}
14             target.length = j - 1;
15         }
16     };
17 } finally {
18     container = null;
19 }

例如:

var arr = [1, 2, 3];

[].push(arr, {"a", "b"});

console.log(arr);  // [1, 2, 3, "a", "b"]  IE8也可正常输出

时间: 2024-08-24 15:45:43

push方法的兼容性问题的相关文章

JavaScript数组方法的兼容性写法 汇总:indexOf()、forEach()、map()、filter()、some()、every()

ECMA Script5中数组方法如indexOf().forEach().map().filter().some()并不支持IE6-8,但是国内依然有一大部分用户使用IE6-8,而以上数组方法又确实非常好用.在过去,我会为了兼容性尽量不用这些方法.但是,总不能为了旧的丢了新的吧?!虽然说jQuery已经集成好了不少语法糖,但jQuery体积太庞大,作为一名志于体面的前端儿得知道原生的兼容性写法要怎么写.于是这几天,我开始在琢磨这些方法的兼容性写法.其实并不难,就是以前不够自信不敢写.写完以后,

获取set()和push()方法向值栈放的数据

------------------siwuxie095 获取 set() 方法向值栈放的数据 1.具体步骤 (1)在 Action 中使用 set() 方法向值栈放数据 (2)在 JSP 页面中从值栈获取数据 2.具体实现 (1)编写 Action @Override public String execute() throws Exception { // (1) 获取值栈对象 ActionContext context=ActionContext.getContext(); ValueSt

JavaScript push() 方法

JavaScript Array 对象 定义和用法 push() 方法可向数组的末尾添加一个或多个元素,并返回新的长度. 语法 arrayObject.push(newelement1,newelement2,....,newelementX) 参数 描述 newelement1 必需.要添加到数组的第一个元素. newelement2 可选.要添加到数组的第二个元素. newelementX 可选.可添加多个元素. 返回值 把指定的值添加到数组后的新长度. 说明 push() 方法可把它的参数

js 的push方法

JavaScript push() 方法 定义和用法 push() 方法可向数组的末尾添加一个或多个元素,并返回新的长度. 语法 arrayObject.push(newelement1,newelement2,....,newelementX) 参数 描述 newelement1 必需.要添加到数组的第一个元素. newelement2 可选.要添加到数组的第二个元素. newelementX 可选.可添加多个元素. 返回值 把指定的值添加到数组后的新长度. 说明 push() 方法可把它的参

如何在present出来的viewController里使用push方法

MenuViewController * menuViewController = [[MenuViewController alloc] init]; menuViewController.delegate = self; UIViewController * controller = self.view.window.rootViewController; controller.modalPresentationStyle = UIModalPresentationCurrentContex

[ExtJS5学习笔记]第二十节 Extjs5配合数组的push方法,动态创建并加载组件

本文地址:http://blog.csdn.net/sushengmiyan/article/details/39226773 官方例子:http://docs.sencha.com/extjs/5.0/apidocs/#!/api/Array-method-push 本文作者:sushengmiyan -------------------------------------------------------------------------------------------------

设计一个栈,除了pop与push方法,还支持Min方法,可返回栈元素中的最小值,push、pop、min三个方法的时间复杂度必须是O(1)

1 /* 2 * 设计一个栈,除了pop与push方法,还支持Min方法,可返回栈元素中的最小值, 3 * push.pop.min三个方法的时间复杂度必须是O(1) 4 * 一种解法是在Stack类里添加一个Int型的minValue,当minValue出栈时,我们会搜索整个栈 5 * 找出最新的最小值,但是却不符合操作时间为O(1)的要求 6 * 如有: 7 * push(4)//最小值:4 8 * push(5)//最小值:4 9 * push(3)//最小值:3 10 * push(1)

...扩展运算符妙用 - ES5中push方法的参数不能是数组

含义 扩展运算符( spread )是三个点(...).它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列. console.log(...[1, 2, 3]) // 1 2 3 console.log(1, ...[2, 3, 4], 5) // 1 2 3 4 5 [...document.querySelectorAll('div')] // [<div>, <div>, <div>] 该运算符主要用于函数调用. array.push(...ite

Array(数组)对象--&gt;push() 方法

1.定义和用法 push() 方法可向数组的末尾添加一个或多个元素,并返回新的长度. 语法: 数组对象名.push(item1, item2, ..., itemX) item1, item2, ..., itemX:要添加到数组的元素. 注意: 1.新元素将添加在数组的末尾. 2.此方法改变数组的长度. 举例: var arr = [1,2,3,4,5]; arr.push(6,7,8); console.log(arr); 输出: 原文地址:https://www.cnblogs.com/a