JavaScript 编程精解 (4)

第四章 数据结构:对象和数组

我们可以使用对象来把值和其他对象组织起来,通过这种手段来构造更为复杂的结构。

数据集

数组:专门用于存储一系列的值。数组中第一个元素的索引是0,而非1。

属性

在JavaScript中,几乎所有的值都有属性,但nullundefined没有。

有两种最为常用的访问属性的方法:使用点(.)和方括号[]。如果使用点,则点之后的部分必须是一个合法变量名,即直接写变量名称。如果使用方括号,则JavaScript会将方括号中表达式的返回值作为属性名称。

方法

我们通常将包含函数的属性称为某个值的方法。比如说,“toUpperCase是字符串的一个方法”。

//数组对象的一些方法
var mack = [];
mack.push("Mack");
mack.push("the", "Knife");
console.log(mack);
// ["Mack", "the", "Knife"]
console.log(mack.join(" "));
// Mack the Knife
console.log((mack.pop));
// Knife;
console.log(mack);
// ["Mack", "the"]

对象

对象类型的值可以存储任意类型的属性,我们可以随意增删这些属性。一种创建对象的方法是使用大括号。

var day1 = {
    // 大括号中,可以添加一系列属性,并用逗号分隔。每一个属性均以名称开头,紧跟一个冒号,然后是对应属性的表达式。
    squirrel: false,
    events: ['work', 'touched tree', 'pizza', 'running', 'television']
};
console.log(day1.squirrel);
// false
console.log(day1.wolf);
// 读取一个不存在的属性就会产生undefined值
day1.wolf = false;  // 如果属性存在,就会替换原有值,如果属性不存在,则创建一个新的属性。
console.log(day1.wolf);
// false

delete 一元运算符,其操作数是访问属性的表达式,可以从对象中移除指定属性。
in 二元运算符,第一个操作数是一个表示属性名的字符串,第二个操作数是一个对象,它会返回一个布尔值,表示该对象是否包含该属性。

var anObject = {left: 1, right: 2};
console.log(anObject.left);
// 1
delete anObject.left;
console.log(anObject.left);
// undefined
console.log(left in anObject);
// false
console.log(right in anObject);
// true

数组是一种用于存储数据序列的特殊对象。

可变性

数字、字符串和布尔值都是不可变值,但对于对象来说,我们可以通过修改其属性来改变对象的内容。

var object1 = {value: 10};
var object2 = object1;
var object3 = {value: 10};
// 在javascript中,使用 == 运算符来比较两个对象时,只有两个对象引用了同一个值,结果才会返回true
console.log(object1 == object2)
// true
console.log(object1 == object3)
// false

对象映射

当我们要保存计算结果时,其中一种方法是使用数组,但这么做有一个问题就是查询时需要循环遍历整个数组。 一种更好的解决方法是用事件类型作为对象的属性名称。这样我们就可以使用方括号来创建或读取对应的属性,也可以使用in运算符来检测其中是否包含我们期望的属性。

一些实用的数组方法

pushpop:在数组末尾添加或删除元素

unshiftshift:在数组开头添加或删除元素

indexOflastIndexOf:从数组第一个(最后一个)元素向后(前)搜索。都有一个可选参数,用来指定搜索的起始位置

slice:接受一个起始索引和一个结束索引,返回[起始索引,结束索引)

数组方法

字符串及其属性

length:获取字符串长度

indexOf:与数组的不同在于字符串中可以使用多个字符作为搜索条件

trim:用于删除字符串中开头和结尾的空白符号(空格、换行符和制表符等符号)

charAt:获取字符串中某个特定的字符

字符串方法

arguments对象

每当函数被调用时,就会在函数体的运行环境当中添加一个特殊的变量arguments。该变量指向一个包含了所有入参的对象。在JavaScript中,我们可以传递多于(或少于)函数参数列表定义个数的参数。

  • arguments有一个length属性,表示实际传递给函数的参数个数。每个参数对应一个属性,被命名为0、1、2,依次类推。

  • arguments看起来很像一个数组。但该对象不包含任何数组方法。

Math对象

Math对象中包含了许多与数字相关的工具函数。简单地把一组相关的功能打包成一个对象供用户使用。其对象本身没有什么实际用途,主要目的是提供一个“命名空间”,封装了所有数学运算函数和值,确保这些元素不会变成全局变量。

全局对象

JavaScript全局作用域中有很多全局变量,都可以通过全局对象进行访问。每一个全局变量作为一个属性存储在全局对象当中。在浏览器中,全局对象存储在window变量当中。

var myVar = 10;
console.log('myVar' in window);
// true
console.log(window.myVar);
// 10

本章小结

  1. 对象和数组(一种特殊对象)可以将几个值组合起来形成一个新的值。理论上讲,我们可以将一组相关的元素打包成一个对象,并通过这个对象来访问这些元素,以避免管理那些支离破碎的元素。

  2. 在JavaScript中,除了nullundefined以外,绝大多数的值都含有属性。我们可以用value.propNamevalue[propName]的方式来访问属性。对象使用名称来定义和存储一定数量的属性。另外,数组中通常会包含不同数量的值,并使用数字(从0开始)作为这些值的属性。

  3. 在数组中有一些具名属性,比如length和一些方法。方法是作为属性存在的函数,常常作用于其所属的值。

  4. 对象可以用来当做映射表,将名称与值关联起来。我们可以使用in运算符确定对象中是否包含特定名称的属性。我们同样可以在for循环中(for(var name in object))使用关键字in来遍历对象中包含的属性。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,427评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,551评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,747评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,939评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,955评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,737评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,448评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,352评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,834评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,992评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,133评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,815评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,477评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,022评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,147评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,398评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,077评论 2 355

推荐阅读更多精彩内容

  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,237评论 0 4
  • 她在马路的另一侧静静地看着伊莎贝尔,看着她在那灯红酒绿,又无比潮湿的街道上吞云吐雾,用那充满欲望、挑逗的眼神看着路...
    雨后大教堂下的我冥想阅读 542评论 0 0
  • 不知道你有没有这种情况。 以前,总是随心所欲。兴致来了,叫一大帮朋友唱K通宵玩游戏;懒癌发作时,谁叫都躺着不动,管...
    特立独行的一只咩阅读 252评论 0 1
  • 过年的时候家里总是不缺“剩饭剩菜”,大鱼大肉吃多,我看到都想吐了,于是顿顿攒满剩菜。也许是父母们经历过饥荒年代,格...
    yuyuyuy阅读 4,170评论 0 0
  • 现在国家一直在提倡国民素质的加强,但是有的人素质还真不是一般的低,尤其是年轻的一代,不仅影响到了自己还影响到了其他...
    忍不住想念_e70c阅读 73评论 0 1