第四章

  1. Object类型
    • 创建Object类型的两种方式:
      1. 使用new操作符后跟object构造函数
      2. 使用对象字面量表示法
    • 访问对象属性的方法:
      1. 点表示法
      2. 方括号语法-->可以通过变量来访问。包含会导致语法错误的字符,或属性名使用的是关键字或保留字,甚至包含非字母非数字的都可以。
  2. Array类型
    • 创建Array类型的两种方式:
      1. 使用Array构造函数
      2. 使用数组字面量表示法
    • 读取和设置数组的值时,要使用方括号并提供相应值的基于0的数组索引。
    • 方括号中的索引表示要访问的值。如果索引的值小于数组中的项数,则会返回对应的值。如果大于数组现有项数,则会自动添加到该索引加1的长度。
    • 设置数组中的值使用相同的语法,但会替换指定位置的值。
    • 数组的项数保存在其length属性中,这个属性始终会返回0或更大的值。
    • 可以通过设置length属性。从数组的末尾位移除项或向数组中添加新项。
    • 如果将其length属性设置为大于数组项数的值,则新增的每一项都会取得undefined值。
    • Array.isArray()确定一个值是不是数组,不管这个值是在那个全局执行环境中创建的。
    • 转换方法:
      1. toString()
      2. toLocaleString()
      3. valueOf()
      4. join()
    • 栈方法:LIFO(后进先出)
      1. push()-->接受任意个参数,然后逐个将它们添加到数组末尾,并返回修改后数组的长度。
      2. pop()-->将数组末尾项移除,并返回移除的项。
    • 队列方法:FIFO(先进先出)
      1. shift()-->移除数组中的第一个项并返回该项,同时将该数组的长度减一。
      2. unshift()-->接受任意个参数,并逐个将它们添加到数组最前端,并返回修改后数组的长度。
    • 重排序方法:
      1. reverse()-->将数组倒序排列。但是按照比较字符串的大小进行排列的。即会将每一个数组项转变为字符串再进行大小比较。可能会有误差。
      2. sort()-->升序排列数组。但是按照比较字符串的大小进行排列的。即会将每一个数组项转变为字符串再进行大小比较。可能会有误差。
    • 操作方法:
      1. concat():先创建当前数组的一个副本,然后将接收到的参数添加到这个副本的末尾,最后返回新构建的数组。原数组并不会被改变。
      2. slice():基于当前数组的一个或多个项目创建一个新的数组。原数组不会被改变。
        1. 传入一个参数,返回从该参数指定位置开始到数组末尾的所有项。
        2. 传入两个参数,返回从第一个参数指定位置到第二个参数指定位置的之间的,不包含第二个参数指定位置的所有项。
        3. 传入参数中有负数,则用该数组的长度加上该数来确定相应的位置。
        4. 如果第二个参数小于第一个参数,则返回空数组。
      3. splice():返回包含从原数组中删除的项,没有则为空数组。会改变原数组。
        1. 删除:可以删除任意数量的项。只需要指定2个参数:要删除的第一项的位置和要删除的项数(注意不是结束位置)。
        2. 插入:可以在指定位置插入任意数量的项,只需要指定3个参数:起始位置,0(要删除的项数),和要插入的项(可有多个)。
        3. 替换:可以向指定位置插入任意数量的项,同时删除任意数量的项,只需要指定3个参数:起始位置,要删除的项,要插入的项。
    • 位置方法:
      1. indexOf():从数组开头位置开始查找
      2. lastindeOf():从数组末尾位置开始查找
      3. 两个方法都接收两个参数(要查找的项和表示查找起点位置的索引(可选))
      4. 两个方法都返回要查找的项在数组中的位置,或者在没找到的情况下返回-1。
      5. 在比较第一个参数与数组中的每一项时,使用的是全等操作符(===)。查找的项必须严格相等才行。
    • 迭代方法:这些方法都接收三个参数-->数组项的值,该项在数组中的位置和数组对象本身。都不会改变原数组。
      1. every():对数组中的每一项运行给定函数,如果该函数的每一项都返回true,则返回true。
      2. some():对数组中的每一项运行给定函数,如果该函数对任意一项返回true,则返回true。
      3. filter():对数组中的每一项运行给定函数,返回该函数中会返回true的项组成的数组。
      4. map():对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组。
      5. forEach():对数组中的每一项运行给定函数,这个方法没有返回值。
    • 归并方法:
      1. reduce():从数组第一项开始,逐个遍历到最后
      2. reduceRight():从数组最后一项开始,向前逐个遍历到第一项
      3. 两个方法都会迭代数组中的所有项,并返回一个最终的值。
      4. 两个方法都接收两个参数:在每一项上调用的函数和作为归并基础的初始值(可选)。
      5. 传给两个方法中的函数都接收四个参数:前一个值,当前值,项的索引和数组对象。
  3. Date类型
    • 创建Date对象,使用new操作符和Date构造函数即可。
    • 在调用Date构造函数而不传入参数的情况下,新建的对象会自动获取当前日期和时间。
    • 想要获取根据特定的日期和时间创建日期对象,可以传入表示该日期的毫秒数或表示该日期的字符串。
    • Date.parse():接收表示日期的字符串参数,然后返回相应日期的毫秒数
      1. "月/日/年",如"7/12/2012"。
      2. "英文月名 日,年",如"January 12,2013"。
      3. "英文星期几 英文月名 日 年 时:分:秒 时区",如"Tue May 21 2014 10:10:15 GMT-0700"。
      4. "YYYY-MM-DDTHH:MM:SS.SSSZ",如"2011-12-21T10:22:12"。
    • Date.UTC():返回表示日期的毫秒数。接收以下七个参数
      1. 年份(必填)
      2. 基于0的月份(一月是0,以此类推。必填)
      3. 月中的哪一天(1-31,可填,不填则默认为1)
      4. 小时数(0-23,可填,不填则默认0)
      5. 分钟(可填,不填则默认0)
      6. 秒(可填,不填则默认0)
      7. 毫秒数(可填,不填则默认0)
    • Date.now():返回表示调用这个方法时的日期和时间的毫秒数。
    • 日期格式化方法:因浏览器而异,没有统一标准。
      1. toDateString:以特定于实现的格式显示星期几,月,日和年。
      2. toTimeString:以特定于实现的格式显示时,分,秒和时区。
      3. toLocalDateString:以特定于时区的格式显示星期几,月,日和年。
      4. toLocalTimeString:以特定于时区的格式显示时,分和秒。
      5. toUTCString:以特定于实现的格式显示UTC日期。
  4. RegExp类型
    • 正则表达式的匹配模式支持下列三种标志:
      1. g:表示全局模式。即模式下将被应用于所有字符串,而非在发现第一个匹配项时立即停止。
      2. i:表示不区分大小写模式。即在确定匹配项时忽略模式与字符串的大小写。
      3. m:表示多行模式。即在到达一行文本末尾时还会继续查找下一行是否存在与模式匹配的项。
      4. y:表示定点模式。定点主要是指在正则表达式的起点有一个虚拟的锚点,只从正则表达式的lastIndex属性指定的位置开始匹配。
    • 模式中使用的所有元字符都要转义。这些元字符包括: ([^$|]?+.*){}
    • RegExp实例属性:
      1. global:布尔值,表示是否设置了g标志。
      2. ignoreCase:布尔值,表示是否设置了i标志。
      3. lastIndex:整数,表示开始搜索下一个匹配项的字符位置,从0算起。
      4. multiline:布尔值。表示是否设置了m标志。
      5. source:正则表达式的字符串表示,按照字面量形式而非传入构造函数中的字符串模式返回。
      6. sticky:布尔值,表示是否设置了y标志。
      7. flags:获取该表达式中使用了那些标志。
    • RegExp实例方法:
      • exec():接收应用模式的字符串,然后返回第一个匹配信息的数组;或者在没有返回项的情况下返回null。返回的数组中包含两个额外的属性:index表示匹配项在字符串中的位置,input表示应用正则表达式的字符串。
        1. exec()方法返回的数组中,第一项时与整个模式匹配的字符串,其他项则是与模式中的捕获组匹配的字符串(如果没有捕获组则只包含一项)。
        2. 当在模式中没有使用全局标志时,exec()方法在同一个字符串上多次调用也只会返回第一个匹配项的信息。
        3. 当在模式中使用全局标志时,每次调用exec()方法则会在字符串中继续匹配新的项。
        4. 在全局匹配模式下,lastIndex值会在每次调用exec()方法后增加,而在非全局模式下则始终保持不变。
      • test():接收字符串参数。在模式与该参数匹配的情况下返回true;否则返回false。
    • RegExp构造函数属性:这些属性适用于作用域中的所有正则表达式,并且基于所执行的最近一次正则表达式操作而变化。
      长属性名 短属性名 说明
      input $_ 最近一次要匹配的字符串
      lastMatch $& 最近一次的匹配项
      lastParen $+ 最近一次的捕获组
      leftContext $` input字符串中lastMatch之前的文本
      multiline $* 布尔值,表示是否所有表达式都使用多行模式
      rightContext $' input字符串中lastMatch之后的文本
  5. Function类型
    • 函数可能有多个名字。
    • 函数没有重载。后面一个函数始终会覆盖前面一个函数。
    • 函数表达式和函数声明在执行上有所不同:
      1. 声明函数的代码在调用它的代码后面也能被正确执行。因为JavaScript引擎会把函数声明自动提升到源代码树的顶部。
      2. 函数表达式的代码不能放在调用他的代码后面。原因同上。
    • 函数可以作为值进行传递。也可以返回一个函数。
    • 在函数内部:
      1. argument:类数组对象。包含所有函数的所有参数。还有一个特殊的属性-->callee,指向拥有这个arguments对象的函数。
      2. this引用的是函数执行的环境。
      3. caller:保存调用当前的函数的引用。
    • 函数属性和方法:
      1. length:表示函数希望接收到的命名参数的个数
      2. prototype:保存所有实例方法。不可以枚举,所以for-in也无法发现。
      3. apply():接收两个参数。第一个是运行函数的作用域,第二个是参数数组(array实例或arguments对象)。作用是在特定的作用域中调用函数。
      4. call():接收两或多个个参数。第一个是运行函数的作用域,第二个是要传入的参数,必须明确的传入每一个参数。作用是在特定的作用域中调用函数。
      5. bind():创建一个新的函数,在 bind() 被调用时,这个新函数的 this 被指定为 bind() 的第一个参数,而其余参数将作为新函数的参数,供调用时使用
  6. 基本包装类型
    • 每当读取一个基本类型值的时候,后台都会创建一个对应的基本包装类型的对象。
    • Object构造函数会根据传入值的类型返回相应基本包装类型的实例。
    • 使用new调用基本包装类型的构造函数,与直接调用同名的转型函数是不一样的。
    • Boolean类型
      1. Boolean类型的实例重写了valueOf()方法,返回基本类型值true或false。
      2. Boolean类型的实例重写了toString()方法,返回字符串"true"或"false"。
      3. type操作符对基本类型返回"boolean",对引用类型返回"object"。
      4. instance操作符测试Boolean对象返回true,对基本类型的布尔值返回false。
    • Number类型
      1. Number类型的实例重写了valueOf()方法,返回基本类型值的数值。
      2. Number类型的实例重写了toString()和toLocaleString()方法,返回字符串形式的数值。
      3. toFixed()方法接收一个数字,表示显示该数字的小数。可以带有0-20个小数位的数值。
      4. toExponential()方法接收一个数字,返回以指数表示法表示的数值的字符串形式,即指定输出结果中的小数点位数。
      5. toPrecision()方法接收一个参数,即表示数值的所有数字的位数。会自动选择相应格式进行输出。
    • String类型
      1. String类型的每一个实例都有length属性
      2. 字符方法:
        1. charAt():接收一个参数,即基于0的字符位置,以单字符字符串的形式返回给定位置的那个字符。
        2. charCodeAt():接收一个参数,基于0的字符位置,返回给定位置的字符的字符编码。
      3. 字符串操作方法:以下方法都不会修改字符串本身的值。
        1. concat():接收任意个参数,可以将这些参数一同拼接起来。
        2. slice():可接收两个参数。第一个参数表示从该位置开始截取(必填),第二个参数表示截取到那个位置结束(可选)。如果没有第二个参数,则将字符串的末尾作为结束的位置。在传入的值为负数时,会将负数与该字符串的长度相加,得到的值作为参数。
        3. substring():可接收两个参数。第一个参数表示从该位置开始截取(必填),第二个参数表示截取到那个位置结束(可选)。如果没有第二个参数,则将字符串的末尾作为结束的位置。在传入的值为负数时,会将负数都转换为0作为参数。
        4. substr():可接收两个参数。第一个参数表示从该位置开始截取(必填),第二个参数表示要截取的长度(可选)。如果没有第二个参数,则将字符串的末尾作为结束的位置。在传入的值为负数时,会将负的第一个参数加上字符串长度,将第二个参数转换为0。
      4. 字符串位置方法:
        1. indexOf():可接收两个参数。第一个参数表示从字符串中搜索给定子字符串,第二个参数表示从字符串中的那个位置开始。找到则返回该子字符串的位置,否则返回-1。当指定第二个参数后,其参数前面的都会被忽略。
        2. indexLastOf():可接收两个参数。第一个参数表示从字符串的后面开始向前搜索给定子字符串,第二个参数表示从字符串中的那个位置开始。找到则返回该子字符串的位置,否则返回-1。当指定第二个参数后,其参数前面的都会被忽略。
      5. trim()方法:创建一个字符串的副本,删除前置以及后缀的所有空格,然后返回结果。不会影响原字符串。
      6. 字符串大小写转换方法:
        1. toLowerCase()
        2. toLocaleLowerCase()
        3. toUpperCase()
        4. toLocaleUpperCase()
      7. 字符串的模式匹配方法:
        1. match():只接收一个参数,正则表达式或RegExp对象。返回一个数组。数组的第一项是与整个模式匹配的字符串,之后的每一项则保存这个与正则表达式中的捕获组匹配的字符串。

        2. search():只接收一个参数,正则表达式或RegExp对象。返回字符串中第一个匹配项的索引。如果没有则返回-1。

        3. replace():接收两个参数。第一个参数是正则表达式或RegExp对象。第二个参数是一个字符串或一个函数。

          1. 第一个参数是字符串,则只会替换掉第一个子字符串。要想替换掉所有子字符串,则需要提供正则表达式,且要指定全局标志(g)。
          2. 第二个参数是字符串,还可以使用一些特殊的字符序列,将正则表达式操作的值插入到结果字符串中。
          字符序列 替换文本
          $$ $
          $& 匹配整个模式的子字符串
          $' 匹配的子字符串之前的子字符串
          $` 匹配的子字符串之后的子字符串
          $n 匹配第n个捕获组的子字符串,其中n等于0-9。如果没有定义捕获组,则使用空字符串
          1. 第二个参数是函数,在只有一个匹配项的情况下,向这个函数传递三个参数:模式的匹配项,模式匹配项在字符串中的位置和原始字符串。
        4. split():可接收两个参数,第一个参数是指定的分隔符(必填),第二个参数是数组大小(可填)。该方法将基于指定的分隔符将字符串分隔成多个子字符串,并将结果放入一个数组中。

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

推荐阅读更多精彩内容