JS数组”(array)和“对象”(object)
比如有一个数组a=[1,2,3,4],还有一个对象a={0:1,1:2,2:3,3:4},然后你运行alert(a[1]),两种情况下的运行结果是相同的!这就是说,数据集合既可以用数组表示,也可以用对象表示,那么我到底该用哪一种呢?
数组表示有序数据的集合,而对象表示无序数据的集合。如果数据的顺序很重要,就用数组,否则就用对象。
当然,数组和对象的另一个区别是,数组中的数据没有“名称”(name),对象中的数据有“名称”(name)。但是问题是,很多编程语言中,都有一种叫做“关联数组”(associative array)的东西。这种数组中的数据是有名称的。
比如在javascript中,可以这样定义一个对象:
var a={"城市":"北京","面积":16800,"人口":1600};
但是,也可以定义成一个关联数组:
- a["城市"]="北京";
- a["面积"]=16800;
- a["人口"]=1600;
在Javascript语言中,关联数组就是对象,对象就是关联数组。这一点与php语言完全不同,在php中,关联数组也是数组。
比如运行下面这段javascript:
- var a=[1,2,3,4];
- a['foo']='Hello World';
- alert(a.length);
最后的结果是4,也就是说,数组a的元素个数是4个。
但是,运行同样内容的php代码就不一样了:
- $a=array(1,2,3,4);
- $a["foo"]="Hello world";
- echo count($a);
最后的结果是5,也就是说,数组a的元素个数是5个。
遍历方法:
一:
- var news = { id:'101', title:'这是标题', content:'这里是内容'}
- for(var n in news){
- document.write(n+'---'+news[n]+'<br>')
- }
二:
- var news = {
- 0:{id:'101', title:'这是标题111', content:'这里是内容111'},
- 1:{id:'101', title:'这是标题222', content:'这里是内容222'},
- 2:{id:'101', title:'这是标题333', content:'这里是内容333'}
- }
- for(var n in news){
- document.write(n+'---'+news[n].title+'<br>')
- }
- /调用值的方法 news.id 或 news['id']
字符转成对象
- s = '{"address":"","email":"123@123.com","name":"test5","id":"6"};';
- eval('o='+s);
- alert(o.name);
- 或:
- data=eval('(' +s+ ')');
-------------------------------------------------------------
对象是一种复合数据类型.
创建对象最简单的方法是你的javascript代码中包含对象直接量,也可以通过运算符new创建。
- var empty = {}; // An object with no properties
- var point = { x:0, y:0 };
- var circle = { x:point.x, y:point.y+1, radius:2 };
- var homer = {
- "name": "Homer Simpson",
- "age": 34,
- "married": true,
- "occupation": "plant operator",
- 'email': homer@example.com
- };
- var a = new Array(); // Create an empty array
- var d = new Date(); // Create an object representing the current date and time
- var r = new RegExp("javascript", "i"); // Create a pattern-matching object
创建对象后,我们可以通过"."运算符,在对象中创建新属性、引用已有属性、设置属性值等。
- var book = new Object(); //创建对象
- book.title="JavaScript: The Definitive Guide";
- book.chapter1=new Object(); //作为对象属性的,嵌套对象
- book.chapter1.title = "Introduction to JavaScript";
- book.chapter1.pages = 11;
- book.chapter2 = { title: "Lexical Structure", pages: 6 };
- alert("Outline: " + book.title + "\n\t" +
- "Chapter 1 " + book.chapter1.title + "\n\t" +
- "Chapter 2 " + book.chapter2.title);
- 从对象中读取一些属性.
在上例中,需注意,可以通过把一个值赋给对象的一个新属性来创建它.
在JavaScript语句中提到过用for/in语句可以遍历对象的属性和方法。
用in运算符检查属性是否存在.如:
if ("x" in o) o.x = 1;//如果存在就设置其属性值为1.
如果这样写:o.x=undefined //属性x是存在的,但是没有值.我常常会这样写:if (o.x !== undefined) o.x = 1;
另外,!= =常代替!=.!= =和= = = 区别在于undefined和null,不用区分时可以省略,如:if (o.doSomething) o.doSomething();
删除属性:delete book.chapter2;
作为关联数组的对象:object.property 和object["property"]是等价的.
通用对象的属性和方法
constructor属性:var d = new Date();d.constructor == Date; // true
由于构造函数定义了一个对象的类,所以属性constructor在有助于确定给定对象的类型.如,可以使用如下代码来确定一个未知对象的类型:if ((typeof o == "object") && (o.constructor == Date)),也可以用instanceof运算符:if ((typeof o == "object") && (o instanceof Date))
toString()方法:返回一个字符串,该字符串代表了调用它的对象的类型或值.当javascript需要将一个对象转换成字符串时就调用这个对象的toString()方法.例如当用"+"连接一个字符和一个对象时,或者把一个对象传递给alert()或document.write()方法时,就会调用toString().
默认的toString()方法提供的信息并不多.例如下面的代码只能得到字符串"[object Object]":var s = { x:1, y:1 }.toString();所以许多类都定义了自己的toString()方法,例如,当一个数组被转换成一个字符串时,就得到一个数组元素列表,其中每个元素都被转换成了字符串,当一个函数被转换成字符串时,就会获得该函数的源代码.第九章将详细讲述.
toLocaleString()方法:返回该对象局部化的字符串表示.Oject类定义的默认toLocaleString()方法自身不做任何局部化,返回的结果与toString() 方法返回的完全相同,但是Object 类的子类则可能定义自己的toLocaleString()方法.
valueOf()方法:与toString()相似,当javascript需要将一个对象转换成字符串之外的原始类型(通常是数字)时,就需要调用它.
hasOwnProperty方法:如果对象局部定义一个非继承的属性,属性名是由一个字符串实际参数指定的,那么该方法将返回true,否则,它将返回false.如:
- var o = {};
- o.hasOwnProperty("undef"); // false: 没有定义该属性
- o.hasOwnProperty("toString"); // false: toString是一个继承属性
- Math.hasOwnProperty("cos"); // true: Math对象有cos属性
propertyIsEnumerable()方法:如果对象定义了一个属性,属性名是由一个字符串实际参数指定的,而且该属性可以用for/in循环枚举出来,那么该方法返回true,否则,返回false.例如:
- var o = { x:1 };
- o.propertyIsEnumerable("x"); // true: property exists and is enumerable
- o.propertyIsEnumerable("y"); // false: property doesn't exist
- o.propertyIsEnumerable("valueOf"); // false: property is inherited
isPrototypeOf()方法:如果调用对象是实际参数指定的对象的原型对象,该方法返回true,否则返回false.该方法的用途和对象的constructor属性相似.例如:
- var o = {}
- Object.prototype.isPrototypeOf(o); // true: o.constructor == Object
- Object.isPrototypeOf(o); // false
- o.isPrototypeOf(Object.prototype); // false
- Function.prototype.isPrototypeOf(Object); // true: Object.constructor==Function
数组方法:
join():可以把一个数组的所有元素都转换成字符串,然后再把它们连接起来,你可以指定一个可选字符串来分隔结果字符串中的元素.如果没有指定分隔字符串,那么可以使用逗号分隔元素.
reverse():将颠倒数组元素的顺序并返回颠倒后的数组.它在原数组上执行这一操作,也就是说,它并不 创建一个重排了元素的新数组,而是在已经存在的数组中对数组元素进行重排.
sort():是在原数组上对数组元素进行排序,返回排序后的数组.如果调用sort()时不传递给它参数,那么它将按照字母顺序对数组元素进行排序(如果必要的话,可以暂时将元素转成字符串以执行比较操作)
concat():能创建并返回一个数组.这个数组包含了调用concat()的原始数组的元素,其后跟随的是concat()的参数.如果其中有些参数是数组,那么它就将被展开,其元素将被添加到返回的数组中.但是要注意,concat()并不能递归地展开一个元素为数组.
slice():返回的是指定数组是一个片段.
splice():插入或删除数组元素的通用方法.它在原数组上修改数组.
push()和pop():使我们可以像使用栈那样来使用数组.方法push()可以将一个或多个新元素附加到数组的尾部.然后返回数组的新长度.方法pop()恰恰相反.
unshift()和shift():与push()和pop() 非常相似,只不过它们是在数组的头部进行元素的插入和删除,而不是在尾部进行元素的插入和删除.
toString()和toLocaleString():注意,在输出的结果中,数组值的周围没有方括号或者其他定界符.
数组附加:indexof()和lastIndexof(),forEach(),map(),filter()
///
对象实例:
- <script>
- var news ={
- 1:{id:101,title:'这是标题1',content:'这里是内容1'},
- 2:{id:102,title:'这是标题2',content:'这里是内容2'},
- 3:{id:103,title:'这是标题3',content:'这里是内容3'},
- 4:{id:104,title:'这是标题4',content:'这里是内容4'},
- jingdian:{101:'AAA',102:'BBB',103:'CCC',104:'DDD'}
- }
- var jingdian ={
- 101:{1101:'天',1102:'地',1103:'东'},
- 102:{2101:'天2',2102:'地2',2103:'东2'},
- 103:{3101:'天3',3102:'地3',3103:'东3'}
- }
- for (var n in news){
- if(n!='jingdian'){
- document.write(n+"--"+news[n].id+"--"+news[n].title+'----'+news[n].content+'======'+get_jingdian(news[n].id)+'=========<br>');
- }
- }
- document.write('<hr>');
- document.write(news[1]['title']+'--');
- document.write(news[1].title);
- document.write('<hr>');
- for (var J in news['jingdian']){
- document.write(news['jingdian'][J]+'<br>');
- }
- document.write('<hr>');
- function get_jingdian(id){
- //document.write(id);
- //alert('id:'+id);
- var str='';
- for (var j in jingdian){
- if(j==id){
- //alert(j+'----'+id);
- for (j2 in jingdian[id]){
- str+='<a href='+j2+'>'+jingdian[id][j2]+'('+j2+')</a> ';
- }
- }
- }
- return str;
- }
- </script>
JS数组”(array)和“对象”(object)相关推荐
- 算法:js 数组 array 去重,并显示所有重复的元素
算法:js 数组 array 去重,并显示所有重复的元素 遇到这样一个问题,一个数组中查重并提取所有重复的项目,不仅仅只展示多出来的. [1,2,2,3,4,5,6,7,3,2,3] 得出 [2,2, ...
- 【数组方法大合集】原生js数组array常用工具方法大合集
var array = {/* 数组求和*/sum: arr => eval(arr.join("+")),/* 判断一个数组(支持一个字符串)里面的是否有任何一个元素被包含 ...
- js数组遍历和对象遍历
针对js各种遍历作一个总结分析,从类型用处:分数组遍历和对象遍历:还有性能,优缺点等. JS数组遍历: 1,普通for循环,经常用的数组遍历 var arr = [1,2,0,3,9];for ( v ...
- js数组Array基础【万字长文】
简介 JavaScript的 Array 对象是用于构造数组的全局对象,数组是类似于列表的高阶对象,用于在单个的变量中存储多个值. 创建数组 1.构造函数创建数组(new Array()) let a ...
- js数组array的常用方法
数组array 方法1: slice[start,end]:返回从原数组中指定开始下标到结束下标之间的项组成的新数组(原数组不变) 1个参数:n,即n到末尾的所有 2个参数:[start,end] v ...
- js 字符串String转对象Object
想要传递对象object,但是一直都是字符串String,因此需要字符串String转对象Object var stt = '1.2,2,3,4,5'; // 转换成字符串类型console.log( ...
- JS数组深拷贝、对象深拷贝
写在前面 为什么要做深拷贝? 简而言之,这是由于js定义的基础数据类型和复杂数据类型的本质决定的.基础数据类型存储在堆中,拷贝赋值引用的是值,修改拷贝后的值并不会影响原值:而复杂数据类型值存储在堆中, ...
- js数组遍历、对象遍历、字符串遍历
2019独角兽企业重金招聘Python工程师标准>>> 数组遍历 for --使用变量将数组长度缓存起来,在数组较长时性能优化效果明显 for(var i=0,len=arr.len ...
- js 数组(Array)
一.数组 稠密数组(非稀疏数组) 稀疏数组 二.数组的添加和删除 我们已经常见过添加数组元素最简单的方法:为新索引赋值;也可以使用push()方法在数组末尾增加一个或者多个元素: a = []; a. ...
最新文章
- [蓝桥杯]PREV-23.历届试题_数字游戏
- SSH开发环境整合搭建
- python进程和线程_Python进程与线程知识
- mysql install语句_mysql8 参考手册--INSTALL COMPONENT语句
- POJ 3414 Pots(罐子)
- 浙大团队研发铜基沸石纱布口罩,1分钟杀灭新冠病毒逾99%
- PAT Basic 1032
- ThreadPoolTaskExecutor多线程使用,及线程池配置
- 允许java运行不安全或不可信的应用程序
- MySQL(2)数据库管理
- Windows下Mysql Cluster集群启动脚本与启动服务添加方法
- [Pku 2774] 字符串(六) {后缀数组的构造}
- 【摘】把vmware的虚拟机硬盘vmdk文件分割成多个2G文件
- cocos2d-x 3.1.1 学习笔记[21]cocos2d-x 创建过程
- 《女士品茶》与统计检验
- 数据分析最常用的excel函数公式大全
- Linux安装rabbitMQ
- 16 | 把大象装进冰箱:HTTP传输大文件的方法
- the OCD JTAG adapter was detected ,but there is...
- 微信开发——加密认证