文章目录

  • 一、数组方法
    • 1、forEach()
    • 2、filter()
    • 3、some()
  • 二、字符串方法
    • 1、trim()
  • 三、对象方法
    • 1、Object.keys()
    • 2、Object.defineProperty()

ES5 中给我们新增了一些方法,可以很方便的操作数组或者字符串,这些方法主要包括:

  • 数组方法
  • 字符串方法
  • 对象方法
  • 接下来我们一一进行讲解。

一、数组方法

迭代(遍历)方法:forEach()map()filter()some()every()

1、forEach()

语法:

array.forEach(function(currentValue, index, arr))
  • currentValue:数组当前项的值
  • index:数组当前项的索引
  • arr:数组对象本身

如下面的例子:有一个数组,现在我们想要得到这个数组的每一个元素和索引号,并且得到该数组和该数组中元素之和,我们可以采用如下方法:

var arr = [1,2,3,4]var sum = 0;arr.forEach(function(value,index,array){console.log('数组元素为:'+value);console.log('每个数组元素的索引为:'+index);console.log('数组元素为:'+array);sum += value;})console.log('数组元素的和为:'+sum);

打印的结果为:

2、filter()

filter()方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素,主要用于筛选数组它直接返回一个新数组。
语法:

array.filter(function(currentValue, index, arr))
  • currentValue: 数组当前项的值
  • index:数组当前项的索引
  • arr:数组对象本身

举例说明:
返回一个数组中大于15的新数组。

var arr = [13,22,33,4,7,8,16]var newArr = arr.filter(function(value,index,array){return value >= 15;})console.log(newArr);

打印结果为:

3、some()

some()方法用于检测数组中的元素是否满足指定条件. 即查找数组中是否有满足条件的元素 。它返回值是布尔值, 如果查找到这个元素, 就返回true, 如果查找不到就返回false。如果找到第一个满足条件的元素,则终止循环. 不在继续查找。
语法:

array.some(function(currentValue, index, arr))
  • currentValue: 数组当前项的值
  • index:数组当前项的索引
  • arr:数组对象本身

例如,判断一个数组中是否有大于20的元素存在。

 var arr = [13,22,33,4,7,8,16]var s = arr.some(function(value){return value > 20;})console.log(s);

打印结果为:

查找一个数组中的某元素是否存在。

 var arr1 = ['x','y','z','m','n','o']var x = arr1.some(function(value){return value = 'x';})console.log(x);

打印结果为:

二、字符串方法

1、trim()

trim() 方法会从一个字符串的两端删除空白字符。trim() 方法并不影响原字符串本身,它返回的是一个新的字符串。
语法:

str.trim()

例如:现在有一个字符串,想要去掉其两端的空白字符,操作如下:

var str = '    wh    ';console.log(str);var str1 = str.trim();console.log(str1);</script>

打印结果为:

三、对象方法

1、Object.keys()

Object.keys()用于获取对象自身所有的属性。效果类似 for…in,返回一个由属性名组成的数组。
语法:

Object.keys(obj)

例如现在有一个对象,我们想要获取它里面的属性名,我们就可以这么操作:

 var obj = {id: 1,name: '王欢',sex:'女',age: 18}console.log(obj);var obj1 = Object.keys(obj);console.log(obj1);

打印的结果为:

如果我们想使用上面得到的数组obj1中的内容,就可以通过forEach来遍历获取。
代码为:

obj1.forEach(function(value){console.log(value);})

打印的结果为:

2、Object.defineProperty()

Object.defineProperty()定义对象中新属性或修改原有的属性。
语法:

Object.defineProperty(obj, prop, descriptor)
  • obj:必需。目标对象
  • prop:必需。需定义或修改的属性的名字
  • descriptor:必需。目标属性所拥有的特性

这里我们需要注意的是:descriptor这个值有几个限定,首先它必须以对象的形式写入。
其次,它可以写的值有:

意义
value 设置属性的值 默认为undefined
writeable 值是否可以重写。true /false 默认为false
enumberable 目标属性是否可以被枚举。true /false 默认为 false
configurable 目标属性是否可以被删除或是否可以再次修改特性 true / false 默认为false

例如:
当我们要修改上例中的对象的name属性时,我们可以操作为:

var obj = {id: 1,name: '王欢',sex:'女',age: 18}console.log(obj);Object.defineProperty(obj,'name',{value:'小熊'})console.log(obj);

打印结果为:

如果我们要将sex属性设置为不可修改时,可以操作为:

 Object.defineProperty(obj,'sex',{writable:false})obj.sex = '男'console.log(obj);

当我们修改属性后,在打印这个对象,得到的结果为:

当我们将sex设置为:writable:true,在打印试试:
修改成功。
如果我们想要让上述中的age在遍历的时候被隐藏掉2,我们可以做如下操作:

 Object.defineProperty(obj,'age',{enumerable:false})console.log(Object.keys(obj));

打印的结果为:

可以看到age这个属性遍历时并不会显示。
需要注意的是,通过Object.defineProperty()添加的属性,其enumerable值也默认为false,所以在遍历的时候也不显示,如果想要显示,直接将其手动改为true.
如果我们不想删除某个属性,并且禁止其被删除,应该怎么操作呢,这里就要要用到configurable这个值。
以上述为例,如果不允许id属性被删除,应该操作为:

Object.defineProperty(obj,'id',{configurable:false})delete obj.idconsole.log(obj);

输出结果为:

当我们通过delete来删除id属性时,发现删除失败。
而且,对于configurable这个值,我们还要谨记:它不可被二次修改。

JavaScriptES5新方法相关推荐

  1. 行人被遮挡问题怎么破?百度提出PGFA新方法,发布Occluded-DukeMTMC大型数据集 | ICCV 2019...

    作者 | Jiaxu Miao.Yu Wu.Ping Liu.Yuhang Ding.Yi Yang 译者 | 刘畅 编辑 | Jane 出品 | AI科技大本营(ID:rgznai100) [导语] ...

  2. 微软提出极低资源下语音合成与识别新方法,小语种不怕没数据!| ICML 2019

    作者 | 谭旭 转载自微软研究院AI头条(ID: MSRAsia) 编者按:目前,人类使用的语言种类有近7000种,然而由于缺乏足够的语音-文本监督数据,绝大多数语言并没有对应的语音合成与识别功能.为 ...

  3. 何恺明的GN之后,权重标准化新方法能超越GN、BN吗? | 技术头条

    点击上方↑↑↑蓝字关注我们~ 「2019 Python开发者日」,购票请扫码咨询 ↑↑↑ 作者 | Siyuan Qiao.Huiyu Wang.Chenxi Liu.Wei Shen.Alan Yu ...

  4. CVPR 2019审稿满分论文:中国博士提出融合CV与NLP的视觉语言导航新方法

    整理 | 刘畅.Jane 责编 | Jane 出品 | AI科技大本营(公众号id:rgznai100) 如何挑战百万年薪的人工智能! https://edu.csdn.net/topic/ai30? ...

  5. 行人检测与重识别!华中科技大、微软深入挖掘,新方法实现新SOTA

    点击上方↑↑↑"视学算法"关注我 来源:公众号 机器之心 授权 如何将目标检测和重识别融合进一个框架,帮助解决多目标跟踪任务?华中科技大学和微软亚洲研究院的研究者找出了这一方向的痛 ...

  6. 无需用户输入,Adobe提出自动生成高质量合成图像新方法

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 没有用户输入,也能生成高质量的合成图像吗? 编辑:迈威AI研习社 ...

  7. CaDDN:基于单目的3D目标检测新方法(CVPR2021)

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨元气满满的打工人 来源丨CV研习社 文章导读 导读:在自动驾驶的技术中,3D目标检测能够提更加丰 ...

  8. Cell:新方法PopCOGenT鉴定微生物基因组间的基因流动

    文章目录 基于微生物种群生物学定义的逆向生态学方法 日报 摘要 主要结果 图1. 重组微生物基因组比非重组微生物基因组共享更长和更高频的一致性区域 图2. 长度偏差测量最近的基因转移事件 图3.最近基 ...

  9. 中国科学家Cell重要评述文章: 宏基因组学成为病毒分类新方法

    比起其他的地球生命体,人类对病毒的了解可谓"冰山一角".宏基因组学作为新型研究工具,拓宽了人类对病毒多样性的认识.本期文献分享的是发表于<CELL>的题为"U ...

最新文章

  1. 【翻译】SQL Server索引进阶:第八级,唯一索引
  2. vivado----fpga硬件调试 (五) ----找不到ila核问题及解决
  3. python 空数组_【python三级】二维数组的表示
  4. 原生js中如果有多个onload事件解决方案
  5. CentOS下TPC-W安装
  6. html文字跳转备注,界面跳转备注.html
  7. 华为手机输入键盘声音_华为手机键盘隐藏7个秘密,你只用来打电话?来一起解锁新玩法...
  8. python 循环技巧
  9. 论文浅尝 | Leveraging Knowledge Bases in LSTMs
  10. IE被哪个T吗D修改了,卧槽!
  11. bzoj1079 [SCOI2008]着色方案
  12. 聊聊springboot2的embeded container的配置改动 1
  13. nlp中region_百度5年深耕NLP 他把聊天机器人变成你的“全科医生”
  14. eXeScope 注册机制破解
  15. 转:组态软件测评∣WinCC、Citect、LabVIEW、InTouch、Ingnition,你更喜欢用哪个?
  16. chromium os系统编译与环境搭建
  17. Java 拾遗补阙 ----- 运算符
  18. 长沙python培训_长的解释|长的意思|汉典“长”字的基本解释
  19. You can't specify target table 'ship_product_cat' for update in FROM clause
  20. 服务器双系统怎么安装教程视频教程,微pe双系统怎么安装教程

热门文章

  1. 娶老婆的15条金科玉律
  2. Linux下烧写工具DNW和USB驱动安装
  3. 使用next(iter(data.DataLoader())报错StopIteration
  4. 重磅!22张深度学习精炼图笔记总结!
  5. 修改 Zotero 参考文献格式
  6. Linux 逻辑卷管理器(LVM)
  7. LibreOJ10155 数字变换 ------ 树形dp
  8. Win10的两个实用技巧系列之设置鼠标指针、红警玩不了怎么办?
  9. 如何用tushare复盘
  10. 立创eda学习笔记十四:pcb板画布设置