Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/455.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 只能存储一种对象类型的数组?_Javascript - Fatal编程技术网

Javascript 只能存储一种对象类型的数组?

Javascript 只能存储一种对象类型的数组?,javascript,Javascript,是否可以创建一个数组,该数组只允许在其中存储特定类型的对象?是否有一种方法可以将元素添加到我可以覆盖的数组中?不直接。但您可以将数组隐藏在闭包中,并仅提供自定义API来访问它: var myArray = (function() { var array = []; return { set: function(index, value) { /* Check if value is allowed */ array[

是否可以创建一个数组,该数组只允许在其中存储特定类型的对象?是否有一种方法可以将元素添加到我可以覆盖的数组中?

不直接。但您可以将数组隐藏在闭包中,并仅提供自定义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)

不直接。但您可以将数组隐藏在闭包中,并仅提供自定义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]=“非数字”时,这是否有效?