js新建数组_js创建数组的三种方式
2024-12-12 16:53 - 立有生活网
js数组,为什么非数字索引的数组时数组的长度为0,非要指定一个数字下标的数组,才显示正确?
js数组只支持数字索引,非数字索引指的是对象的属性了。跟你解释一下,这其中的别,js的数组可以看做是特殊的对象(object),对象的属性有两种表示方法
js新建数组_js创建数组的三种方式
js新建数组_js创建数组的三种方式
js新建数组_js创建数组的三种方式
如var a=Object();
1.a.myattr="lee";
2.a["myattr"]="lee";
1和2是等价的
不过楼主给的两条例子还是比较有探讨性的,先说
var a=new Array();
a[function unique2(array){'a1']=1;
a['a2']=2;
a.length //输出0
你没有给数组的元素赋值,所以a数组的长度也没有被创建出来,此时a.length自然是0.
var a=new Array();
a['a1']=1;
a['a2']=2;
a[2]=3;
你给数组元素a[2]赋值了,此时js会给数组a创建一个长度为3的空间,并在第三个元素中赋以3,但是元素1和元素2都没有赋值,所以此时a[0]和a[1]是没有值的for,不信用可以alert一下
js 究竟什么时候使用对象数组 什么时候使用数组对象
for(var i = 1; i < array.length; i++) {对象数组:里面存放对象的数组
数组对象:js中数组就是个对象
是这样var sls = document.querySelectorAll("#sl");的?
对象数组不还是数组?什么使用条件...?你要存什么数据就存呗,js弱类型,数组不是只能存单一类型的。老实说不存在什么对象数组,字符串数组的分类
JSON应用中,同级为数组,不相关用对象
JS中为什么两个数组结果一样?
obj1.array.push("Kyo"); //向obj1的array属性添加一个元素把原数组作为参数传递给方法fun1(),传递的实际上是原数组的内存地址,而把参数传给新数组,传递的也仍然是内存地址,这也就是说,原数组arr1、参数arr、新数组new1,实际上foreach ($numbers as $number) {//遍历数组都是同一个数组!所以你修改它们中任何一个值,其他两个的值也会改变。这就好比同一个人有三个名字:张三、李四、王五,你打张三的脸,不仅张三会疼,李四、王五也会疼的!
数组也是对象,而对象是不能够通过简单的赋值方法来(或者说克隆)的,如果直接把对象赋值给一个变量,只不过相当于给对象起了个别名而已!要想真正一个对象,必须先建立一个空对象,然后把要的对象的属性、方法、、子对象等逐一拷贝到新对象中。
js创建数组对象的过程有几种?特点是什么?
js编程中创建对象的几种方式,如原始方法、工厂方法等创建对象。
1、原始方法
var obj = new Object();
obj.name = "Koji"; //为对象添加属性
obj.age = 21;
obj.showName = function(){ //为对象添加方法
alert(this.age);
}obj.showName(); //Koji
obj.showAge(); //21
上面的方式通过new关键字生成一个对象,然后根据JS是动态语言的特性添加属性和方法,构造一个对象。其中的this是表示调用该方法的对象。
这种方式的问题是如果需要多次创建对象,则需要重复代码多次,不利于代码的复用。
function createObj(){
var obj = new Object(); //创建对象
obj.name = "Koji";
obj.age = 21;
obj2.showName(); //Luoobj.showName = function(){
alert(this.age);
}return obj; //返回对象
}var obj1 = createObj();
var obj2 = createObj();
obj1.showName(); //Koji
这种方式提高了代码重用率,还可以改变工厂方法,传入参数赋值。
function createObj(name, age){ //构造对象时可以传入初始化参数
var obj = new Object(); //创建对象
obj.name = name;
obj.age = age;
obj.showName = function(){
alert(this.age);
}return obj; //返回对象
}var obj1 = createObj("Koji", 22);
obj1.showName(); //Koji
改进如下:
function createObj(name, age){
var obj = new Object(); //创建对象
obj.name = name;
obj.age = age;
obj.showName = showName;
obj.showAge = showAge;
return obj; //返回对象
}function showName(){ //函数也是一个对象
}function showAge(){
alert(this.age);
}var obj1 = createObj("Koji", 22);
obj1.showName(); //Koji
上面通过定义连个函数对象,解决了不同对象持有函数对象的私有问题。现在所有对象的方法都持有上面两个函数的引用。但这么一来的话,对象的函数又和对象成了相互,不相干的了。这和面向对象定方法属于特定类的思想不符合。
3、构造函数方式
//定义一个构造函数,用来生成对应的对象,可以类比Ja中的构造函数
function Person(name, age){
//当调用new Person的时候,在执行行代码前,先生成一个Person对象,并将对象在内存中的
//索引赋值给this关键字,此时可以通过this关键字作新生成的对象,如下面的添加属性或方法
this.name = name; //this关键字不能少。为当前对象,即this关键字引用的对象的name属性赋值
//,实际相当于为当前对象添加name属性后,再为其name属性赋值。
this.age = age;
this.showName = function(){ //为当前对象添加方法
}this.showAge = function(){
alert(this.age);
}var obj1 = new Person("Koji", 22); //生成一个Person对象
var obj2 = new Person("Luo", 21);
obj1.showName(); //Koji
构造函数的方式和工厂方式一样,会为每个对象创建独享的函数对象。当然也可以将这些函数
对象定义在构造函数外面,这样又有了对象和方法相互的问题。
原型方法:
function Person(){} //定义一个空构造函数,且不能传递参数
//将所有的属性的方法都赋予prototype属性
Person.prototype.name = "Koji"; //添加属性
Person.prototype.age = 22;
Person.prototype.showName = function(){ //添加方法
}Person.prototype.showAge = function(){
alert(this.age);
}var obj1 = new Person(); //生成一个Person对象
var obj2 = new Person();
obj1.showName(); //Koji
obj2.showName(); //Koji
obj2.showAge(); //22
当生成Person对象的时候prototyvar myA=new Array("张三", "李四","王五");pe的属性都赋值给了新的对象。那么属性和方法是共享的。
该方法的问题首先是构造函数不能传参,每个新生成的对象都有默认值。其次,方法共享没有任何问题,但是属性共享就有问题,当属性是可改变状态的对象的时候。
例子:
function Person(){} //定义一个空构造函数,且不能传递参数
Person.prototype.age = 22;
Person.prototype.array = new Array("Koji", "Luo");
Person.prototype.showAge = function(){
alert(this.age);
}Person.prototype.showArray = function(){
alert(this.array);
}var obj1 = new Person(); //生成一个Person对象
var obj2 = new Person();
obj1.showArray(); //Koji,Luo,Kyo
obj2.showArray(); //Koji,Luo,Kyo
以上代码通过obj1向obj1的属性array添加元素的时候,obj2的arra属性的元素也跟着受到影响,原因就在于obj1和obj2对象的array属性引用的是同一个Array对象,那么改变这个Array 对象,另一引用该Array对象的属性自然也会受到影响混合的构造函数/原型方式。
使用构造函数定义对象的属性,使用原型(prototype)定义对象的方法,这样就可以做到属性私有,而方法共享。
例子:
this.age = age;
this.array = new Array("Koji", "Luo");
}Person.prototype.showName = function() {
}Person.prototype.showArray = function() {
alert(this.array);
}var obj1 = new Person("Koji", 22); //生成一个Person对象
var obj2 = new Person("Luo", 21);
obj1.showArray(); //Koji,Luo,Kyo
obj1.showName(); //Koji
obj2.showArray(); //Koji,Luo
属性私有后,改变各自的属性不会影响别的对象。同时,方法也是由各个对象共享。在语义上,
这符合了面相对象编程的要求。
4、动态原型方法
this.age = age;
this.array = new Array("Koji", "Luo");
//如果Person对象中的_initialized为undefined,表明还没有为Person的原型添加方法
if (typeof Person._initialized == "undefined")
{Person.prototype.showName = function() {
}Person.prototype.showArray = function() {
alert(this.array);
}Person._initialized = true; //设置为true,不必再为prototype添加方法
var obj1 = new Person("Koji", 22); //生成一个Person对象
var obj2 = new Person("Luo", 21);
obj1.showArray(); //Koji,Luo,Kyo
obj1.showName(); //Koji
obj2.showArray(); //Koji,Luo
这种方法和构造函数/原型方式大同小异。只是将方法的添加放到了构造函数之中,同时在构造函数Person上添加了一个属性用来保证if语句只能成功执行一次。
在实际应用中采用最广泛的是构造函数/原型方法。动态原型方法也很流行,它在功能上和构造函数/原型方法是等价的,不要单独使用构造函数或原型方法。
js定义了一个数组,在控制台输出,次打开控制台时显示的是数组,刷新一下怎么就变成object了
这样 a 对象就有 get set 了。注意 get set 方法对应的方法名,和你用这个方法名要存储的字段不能用相同,不然会内存溢出。(不要问我为什么特意提出来。)试了一下代码
}//将当前对象返回给赋值符号左边的变量(不必明确使用return)次输出 Array[1]
刷新后输出[Object]
但这两个都是表示数组,用[]括号括住,就是数组的表现形式
如果是对象的话应该是,Object而不是[Object]
至于为什么输出[Object],因为myarr内只有一个元素,而这个元素是一个对象,如果再添加几个元素进去,例如我添加了一个1,输出就变成[Object, 1]
js调用html中js定义的数组,求方法
没有该方法, js的一维数组就是动态的首先 确认 你定义数组的js 不是在方法里面 这样才能被另一个方法所调用 只要保证了前面的要求 那么另一个方法里面直接使用就行了
var r = [];具体 参看 js 定义全局变量
或者 你 可以 在另一个方法里面 通过参数的形式 将这个数组传入
//定义一个数组方法1
var arr = new Array;
//向数组添加值
arr.push('元素a');
arr.push('元素b');
//定义一个数组方法2
var arr2 = ['元素1','元素2,'元素3'];
//读取元素的值
alert(arr[0]); //显示 元素a
alert(arr2[2]); //显示 元素3
你可以把这个html中的定义的数组,放在里,然后在中的js可以读到这些数组。
js中怎么把值放入数组中
alert(this.name);var a = [];
a.push("nagisa");
a[1] = "kotomi";
两种都可以,第二种要提供一个下标,重是放到数组末尾
不知道你什么意思?这是最基本的:
(1) 使用方括号,创建数组的同时赋初值
var myA=["张三", "李四","王五"];
var b=[10,20,30,40];
(2) 使用new 作符,创建数组的同时赋初值
注意圆括号和方括号的区别,不能任意使用。
(3) 先创建长度为10的数组,内容后面再赋值
var anArray = new Array(9);
anArray[0]= "张三";
anArray[1]= "李四";
anArray[2]= "王五";
声明一个数组引用
var arr=new Array();
arr[0]="要填的值1";
arr[1]="要填的值2" // 可以使用For循环添加!
或者按此种方式添加:
example 1:
var jsArray = new Array();
jsArray [0] = 'data0';
......
example 2:
var jsArray = new Array('001','002');
var mycars = new Array()
mycars[0] = "Saab"
mycars[1] = "Volvo"
mycars[2]//遍历当前数组 = "BMW"
for (i=0;i {document.write(mycars[i] + " ") } 就是生成无重复随机数了。我跟你说下原理,代码的话你自己就明白了。 每次生成一个随机数,再判断生成的随机数,是否存在于已经生成的随机数群组中,如果存在,则重复执行生成随机数这个动作。 这样就可以保证生成的随机数没有重复。而且位置也没有一定的规律。 我查了下手册,还有一个更简单的方法就是使用函数:shuffle( array &array ) 该函数的作用是随机打乱一个数组。 这样就简单了,你先生成一个数组(1-100),然后使用此函数将数组随机打乱,这样就生成了无重复的随机数组。 以下代码亲测可行。 $numbers = range(1,100);//生成1-100之间的数组。 shuffle($numbers);//打乱数组 $i=0;//换行标记 $i++;//标记自增 if($i %10==0) echo " }?> MD写完了,发现你问的是JS的,我回答的是PHP的,不过方法1是通用的。JS中不知道有没有这样的函数。 var arr = []; for(var i = 1;i<=30;i++){ arr.push(i); }alert(arr.length+"---"+arr[29]);这样的。。。 list=new Array(); function a() {list.push(5);//添加数组元素 }function b() {list[0];//取数组元素 }}obj.showAge = function(){ var[] array; function a() {}}} function b() {}js如何生成120之间4组随机数组
echo "$number ";//输出数值
";//如果输出10个则换行。用js生成一个数组,内放数字1~30
a_ = this[i];Js中声名全局的数组?
火影忍者592什么时候出 火影忍者什么时候出
关于火影忍者592什么时候出,火影忍者什么时候出a忍这个很多人还不知道,今天小华来为大家解答以上的问题,现在让我们一起来看看吧! 火影忍者592什么时候出 火影忍者什么时候出a忍 火影忍者···
msn web版 msn中文网
小深今天给分享msn web版的知识,其中也会对msn中文网进行解释,希望能解决你的问题,请看下面的文章阅读吧! msn web版 msn中文网 msn web版 msn中文网 1、,这个就是的网页版本 MSN。 2、我想你的办···
安博物流中心(上门取货物流公司电话)
小华今天给分享安博物流中心的知识,其中也会对上门取货物流公司电话进行解释,希望能解决你的问题,请看下面的文章阅读吧! 1、根据查询相关息显示,工作压力小,工作轻松,工作环境好,···