25.Symbol目的:为了解决对象之间属性名冲突的问题,Symbol它是引用数据类型。
Symbol( ),它代表着一个独一无二的值
[name]: '小红',//加中括号代表默认创建了一个Symbol类型 let name = Symbol();
let name = SymboL();
let person = {};
person.name = "张三” ;
person[ name ];
//结果: undefined
person['name' ]; //结果:张三
person . name ;
//结果:张三

  

person[‘name’]的意思的person[name]是 let name=Symbol()类型转化为普通类型的意思  person.name="张三"
26. Object.getOwnPropertySymbols函数
Object.getOwnPropertySymbols()可以拿所有symbol类型的键。
//定 义两个symbo 1类型的变量name, age
let name = SymboL(”name" );
let age = SymboL(" age");
let person = {
[name ]:"张三”,//symbol类型
[age]:12
//symbol类型
};
object. getOwnPropertySymbols (person);
//结果: [Symbol(name), Symbol(age)]
   Reflect.ownKeys函数
Reflect.ownKeys()可以获取对象所有的属性。
//定义一个对象,含有两种类型的属性
let person = {
[ Symbol( ' name ' )]:"张三”,
age" : 21
};
Ref lect . ownKeys (person) ;
//结果: [”age", Symbol(name) ]
27.Symbol.for函数
函数作用:根据参数名,去全局环境中搜索是否有以该symbol.for()参数为名的symbol值,有就返回它,没有就以该参数名来创建一个新的symbol值。是全局的let
let n1 = Symbol. for(' name' ) ;
let n2 = Symbol. for( 'name' );
console. log(n1 === n2) ;
//结果: true
Symbol( )和Symbol.for()的区别:
Symbol.for( )创建的symbol值会被登记在全局环境中,供以后用Symbol.for( )来搜索,而Symbol( )创建的变量就没有这样的效果了,它是局部的不是全局的。
Symbol.keyFor函数
函数作用:返回一个以被登记在全局环境中的symbol值的key,没有就返回undefined。注意这句话的一个关键词:“被登记在全局环境中”,也就是说这个symbol值是被Symbol.for( )创建的,不是被Symbol( )创建的。
Symbol类型,Object.keys( )和for...in for...of都无法获取到它。
28.for…of使用
var arr = [1,2,3,4,5];
for( let value of arr){
console. log(vaLue);
//打印结果:依次输出:12345
for...of的优势:
1. 写法比for循环简洁很多;
2. 可以用break来终止整个循环,或者continute来跳出当前循环,继续后面的循环;
结合keys( )获取到循环的索引,并且是数字类型,而不是字符串类型。
循环可以终止
var arr = [1,2,3,4,5];
for(let vaLue of arr){
if (value == 3){
//终止整个循环
break ;
console. log( value);
//打印结果: 1 2

  

以上案例:用break实现了终止整个循环,不会继续后面的遍历,所以打印结果为:1  2。
可以跳过当前循环:
var arr = [1,2,3,4,5];
for(let value of arr){
if (value == 3){
//跳过当前循环,继续后面的循环
continue ;
console. log(value);
}
//打印结果: 1 2 4 5

  

用continue跳过当前循环,继续后面的循环,所以打印结果为:1  2  4  5。
得到数字类型索引
var arr = [1,2,3,4,5];
for(let index of arr .keys()){
console. log ( index);
//打印结果:依次输出:0 1 2 3 4

  

  使用数组的扩展keys( ),获取键名再遍历,得到的index是数字类型的。
此外,相比于for...in循环专门为对象设计,for...of循环的适用范围更广。
遍历字符串
for...of 支持字符串的遍历。
let word=“我是前端君";
for(let W of word){
console. log(w);
//打印结果:我 是 前 端 君

  

  遍历DOM list
for...of支持类数组的遍历,例如DOM List。
<p>1</p>
<p>2</p>
<p>3</p>
//假设有3个p元素
let pList = document . getE lementsByTagName('p ' );
for(let p of pList){
console.1og(p);
}
//打印结果: <p>1</p> // <p>2</p> //<p>3</p>
for...of支持set和map解构的遍历,
for...in、for...of和for...each()区别:
for-of()会获取到数组的每一个的值,更适合于数组对象,不要用于对象。可以使用 break, continue 和 return。
根据of后边的参数来绝定拿到的是string或者number类型。也支持字符串的遍历
var arr=[1,2,3,4,5]
var obj={
key1:'value1',
key2:'value2',
key3:'value3',
key4:'value4',
}
var arObj=[
{k11:'value11'},
{k22:'value22',k21:'value21'},
{k33:'value33',k32:'value32',k31:'value31'},
]
for(var i in arr){
console.log(i)
}
for(var i in obj){
console.log(i)
}
for(var i of arObj){
console.log(i)
} for-in()会获取到数组的下标、会获取到对象的key值。所以for in更适合遍历对象,不要使用for in遍历数组,拿到i是字符串类型。
var arr=[1,2,3,4,5]
var obj={
key1:'value1',
key2:'value2',
key3:'value3',
key4:'value4',
}
for(var i in arr){
console.log(i)
}
for(var i in obj){
console.log(i)
}

  

forEach()方法 用于调用数组的每个元素,并将元素传递给回调函数。 注意: forEach() 对于空数组是不会执行回调函数的。 array.forEach(function(currentValue, index, arr), thisValue) 
参数1:function(currentValue, index, arr) 必需。 数组中每个元素需要调用的函数。 参数2: thisValue 可选。传递给函数的值一般用 "this" 值。           
 如果这个参数为空, "undefined" 会传递给 "this" 值
<body>
<button onclick="numbers.forEach(myFunction)">点我</button>
<p>数组元素总和:<span id="demo"></span></p>
</body>
<script>
var sum = 0;
var numbers = [65, 44, 12, 4];
function myFunction(item) {
sum += item; demo.innerHTML = sum;
}
</script>

  

</script>

最新文章

  1. C++11智能指针读书笔记;
  2. 委托的例子,from C# advanced program
  3. 基于android平台的出题软件---- 每日30题
  4. 第十天 多进程、协程(multiprocessing、greenlet、gevent、gevent.monkey、select、selector)
  5. VC使用libcurl模拟登录CSDN并自动评论资源以获取积分
  6. 转——使用Axure制作App原型应该怎样设置尺寸?
  7. 为 PHP 开发者准备的 12 个调试工具(转)
  8. 10秒视频转局部GIF动画
  9. ASP.NET MVC URL重写与优化(进阶篇)-继承RouteBase
  10. Java编程思想重点笔记
  11. I’m stuck!
  12. 3、ABPZero系列教程之拼多多卖家工具 项目修改及优化
  13. Vue框架之双向绑定事件
  14. Oracle 大数据集成实施
  15. 【JavaScript】学习中遇到的一些问题
  16. REST_返回形式
  17. (整理)在REHL6.5上部署ASP.NET MVC
  18. pandas 定位 loc,iloc,ix
  19. 关于矩阵A*b=A*c 中b是否等于c
  20. Oracle入门笔记 ——启动进阶

热门文章

  1. python之爬虫(八)BeautifulSoup库的使用
  2. 如何理解Javascript中的函数(Function)
  3. Oracle数据库服务器更改计算机名称,导致监听服务打不开解决办法
  4. SpringBoot2.x入门教程:引入jdbc模块与JdbcTemplate简单使用
  5. ztree : checkbox 选中/不选中时动态添加/删除DOM元素
  6. 【JVM之内存与垃圾回收篇】方法区
  7. 高效C++:模板和泛型编程
  8. ”initialization failure:0x0000000C“错误,何解?
  9. 像计算机科学家一样思考Python(第2版)|百度网盘免费下载|Python新手入门资料
  10. 一个文本框的各项说明,包括类似html的table