Javascript 只能存储一种对象类型的数组?
是否可以创建一个数组,该数组只允许在其中存储特定类型的对象?是否有一种方法可以将元素添加到我可以覆盖的数组中?不直接。但您可以将数组隐藏在闭包中,并仅提供自定义API来访问它:Javascript 只能存储一种对象类型的数组?,javascript,Javascript,是否可以创建一个数组,该数组只允许在其中存储特定类型的对象?是否有一种方法可以将元素添加到我可以覆盖的数组中?不直接。但您可以将数组隐藏在闭包中,并仅提供自定义API来访问它: var myArray = (function() { var array = []; return { set: function(index, value) { /* Check if value is allowed */ array[
var myArray = (function() {
var array = [];
return {
set: function(index, value) {
/* Check if value is allowed */
array[index] = value;
},
get: function(index) {
return array[index];
}
};
})();
像这样使用它
myArray.set(123, 'abc');
myArray.get(123); // 'abc' (assuming it was allowed)
不直接。但您可以将数组隐藏在闭包中,并仅提供自定义API来访问它:
var myArray = (function() {
var array = [];
return {
set: function(index, value) {
/* Check if value is allowed */
array[index] = value;
},
get: function(index) {
return array[index];
}
};
})();
像这样使用它
myArray.set(123, 'abc');
myArray.get(123); // 'abc' (assuming it was allowed)
不直接。但您可以将数组隐藏在闭包中,并仅提供自定义API来访问它:
var myArray = (function() {
var array = [];
return {
set: function(index, value) {
/* Check if value is allowed */
array[index] = value;
},
get: function(index) {
return array[index];
}
};
})();
像这样使用它
myArray.set(123, 'abc');
myArray.get(123); // 'abc' (assuming it was allowed)
不直接。但您可以将数组隐藏在闭包中,并仅提供自定义API来访问它:
var myArray = (function() {
var array = [];
return {
set: function(index, value) {
/* Check if value is allowed */
array[index] = value;
},
get: function(index) {
return array[index];
}
};
})();
像这样使用它
myArray.set(123, 'abc');
myArray.get(123); // 'abc' (assuming it was allowed)
是的,您可以,只需覆盖阵列的推送阵列(假设您只想存储数字,而不需要执行以下操作:
var myArr = [];
myArr.push = function(){
for(var arg of arguments) {
if(arg.constructor == Number) Array.prototype.push.call(this, arg);
}
}
var myArr = new Proxy([], {
set(obj, prop, value) {
if(value.constructor !== Number) {
obj.splice(prop, 1);
}
//I belive thats it, there's probably more to it, yet because I don't use firefox or IE Technical preview I can't really tell you.
}
});
只需将Number
更改为您想要匹配的任何构造函数。此外,我可能会添加and else语句或其他内容,以便在您想要的情况下抛出错误
更新:
使用Object.observe(目前仅在chrome中提供):
现在,在ES6中有一些代理,您应该能够执行以下操作:
var myArr = [];
myArr.push = function(){
for(var arg of arguments) {
if(arg.constructor == Number) Array.prototype.push.call(this, arg);
}
}
var myArr = new Proxy([], {
set(obj, prop, value) {
if(value.constructor !== Number) {
obj.splice(prop, 1);
}
//I belive thats it, there's probably more to it, yet because I don't use firefox or IE Technical preview I can't really tell you.
}
});
是的,您可以,只需覆盖阵列的推送阵列(假设您只想存储数字,而不需要执行以下操作:
var myArr = [];
myArr.push = function(){
for(var arg of arguments) {
if(arg.constructor == Number) Array.prototype.push.call(this, arg);
}
}
var myArr = new Proxy([], {
set(obj, prop, value) {
if(value.constructor !== Number) {
obj.splice(prop, 1);
}
//I belive thats it, there's probably more to it, yet because I don't use firefox or IE Technical preview I can't really tell you.
}
});
只需将Number
更改为您想要匹配的任何构造函数。此外,我可能会添加and else语句或其他内容,以便在您想要的情况下抛出错误
更新:
使用Object.observe(目前仅在chrome中提供):
现在,在ES6中有一些代理,您应该能够执行以下操作:
var myArr = [];
myArr.push = function(){
for(var arg of arguments) {
if(arg.constructor == Number) Array.prototype.push.call(this, arg);
}
}
var myArr = new Proxy([], {
set(obj, prop, value) {
if(value.constructor !== Number) {
obj.splice(prop, 1);
}
//I belive thats it, there's probably more to it, yet because I don't use firefox or IE Technical preview I can't really tell you.
}
});
是的,您可以,只需覆盖阵列的推送阵列(假设您只想存储数字,而不需要执行以下操作:
var myArr = [];
myArr.push = function(){
for(var arg of arguments) {
if(arg.constructor == Number) Array.prototype.push.call(this, arg);
}
}
var myArr = new Proxy([], {
set(obj, prop, value) {
if(value.constructor !== Number) {
obj.splice(prop, 1);
}
//I belive thats it, there's probably more to it, yet because I don't use firefox or IE Technical preview I can't really tell you.
}
});
只需将Number
更改为您想要匹配的任何构造函数。此外,我可能会添加and else语句或其他内容,以便在您想要的情况下抛出错误
更新:
使用Object.observe(目前仅在chrome中提供):
现在,在ES6中有一些代理,您应该能够执行以下操作:
var myArr = [];
myArr.push = function(){
for(var arg of arguments) {
if(arg.constructor == Number) Array.prototype.push.call(this, arg);
}
}
var myArr = new Proxy([], {
set(obj, prop, value) {
if(value.constructor !== Number) {
obj.splice(prop, 1);
}
//I belive thats it, there's probably more to it, yet because I don't use firefox or IE Technical preview I can't really tell you.
}
});
是的,您可以,只需覆盖阵列的推送阵列(假设您只想存储数字,而不需要执行以下操作:
var myArr = [];
myArr.push = function(){
for(var arg of arguments) {
if(arg.constructor == Number) Array.prototype.push.call(this, arg);
}
}
var myArr = new Proxy([], {
set(obj, prop, value) {
if(value.constructor !== Number) {
obj.splice(prop, 1);
}
//I belive thats it, there's probably more to it, yet because I don't use firefox or IE Technical preview I can't really tell you.
}
});
只需将Number
更改为您想要匹配的任何构造函数。此外,我可能会添加and else语句或其他内容,以便在您想要的情况下抛出错误
更新:
使用Object.observe(目前仅在chrome中提供):
现在,在ES6中有一些代理,您应该能够执行以下操作:
var myArr = [];
myArr.push = function(){
for(var arg of arguments) {
if(arg.constructor == Number) Array.prototype.push.call(this, arg);
}
}
var myArr = new Proxy([], {
set(obj, prop, value) {
if(value.constructor !== Number) {
obj.splice(prop, 1);
}
//I belive thats it, there's probably more to it, yet because I don't use firefox or IE Technical preview I can't really tell you.
}
});
与其直接操纵数组,不如创建自己的函数或方法来操纵数组,这样在实际将数据放入数组之前,您就可以按照自己的意愿调节数据。与其直接操纵数组,不如创建自己的函数或方法来操纵数组,这样您就可以按照自己的意愿调节数据在实际将数据放入数组之前。与其直接操纵数组,不如创建自己的函数或方法来操纵数组,这样在实际将数据放入数组之前,您就可以按照自己的意愿对数据进行调节。与其直接操纵数组,不如创建自己的函数或方法来操纵数组,这样您就可以n在实际将数据放入数组之前,请按需要对数据进行条件处理。这非常严格,因为它不支持数组方法,例如
.length
或.slice()
或.forEach()
etc…事实上,您甚至不能迭代该对象中的元素。演示了一个可能的方向,但在实现时可能不实用。@jfriend00是的,这些方法将非常有用。实现留给读者作为练习:)这是非常严格的,因为它不支持数组方法,例如.length
或.slice()
或.forEach()
etc…事实上,您甚至不能迭代该对象中的元素。演示了一个可能的方向,但在实现时可能不实用。@jfriend00是的,这些方法将非常有用。实现留给读者作为练习:)这是非常严格的,因为它不支持数组方法,例如.length
或.slice()
或.forEach()
etc…事实上,您甚至不能迭代该对象中的元素。演示了一个可能的方向,但在实现时可能不实用。@jfriend00是的,这些方法将非常有用。实现留给读者作为练习:)这是非常严格的,因为它不支持数组方法,例如.length
或.slice()
或.forEach()
etc…事实上,您甚至不能迭代该对象中的元素。演示了一个可能的方向,但实现起来可能不实用。@jfriend00是的,这些方法将非常有用。实现留给读者作为练习:)但是当数组设置为arr[3]=“不是数字”时,这会起作用吗?但是,当数组设置为arr[3]=“非数字”时,这是否有效?但当数组设置为arr[3]=“非数字”时,这是否有效?但当数组设置为arr[3]=“非数字”时,这是否有效?