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>

ECMAScript6新增数据类型symbol数据类型的更多相关文章

  1. ES6的新增数据类型:Symbol

    简介:Symbol类型是es6新增的一个数据类型,Es5的基本数据类型(undefined,null,Object,function,Number,string) Symbol值通过Symbol函数生 ...

  2. ES6 新增基本数据类型Symbol

    ES6 增加了一个新的基本数据类型 symbol. 不过,和其他基本数据类型相比,它有点与众不同,因为它没有字面量的表现形式,而且创建的方式也有点奇怪,只能通过调用全局函数Symbol()来完成. l ...

  3. ES6新增数据类型Symbol

    Symbol的含义? ES6(2015) 引入了第七种原始数据类型Symbol,Symbol英文文意思为 符号.象征.标记.记号,在 js 中更确切的翻译应该为独一无二的 Symbol的使用? Sym ...

  4. 基本数据类型 Symbol

    ES6 规范之前, JavaScript 一共有六种数据类型,分别是五种基本数据类型: string . number , boolean , null , undefined ,和一种引用数据类型: ...

  5. JS中的Symbol数据类型

    最初JS的6种数据类型: null,undefined,boolean,number,string,object 注意:实际上,array和function都是属于object的子类 ES6中,新增了 ...

  6. ES6 之 第七种数据类型Symbol

    概述 为了减少对象的属性名冲突,ES6引入新的原始数据类型Symbol,JS的第七种数据类型. Symbol 能够保证每个属性的名字都是独一无二,这样就能从根本上防止属性名冲突. Symbol 值能够 ...

  7. ES6中的新数据类型——Symbol

    今天小编和大家来聊一聊es6中新增的一个原始数据类型Symbol.在es5中原始数据类型(基本数据类型)有以下六种:Undefind.Null.Bool. String.Number.Object.今 ...

  8. ES6——Symbol数据类型

    什么是 Symbol ? Symbol 表示独一无二的值,他是js中的 第七种数据类型. 基本的数据类型:null, undefined number boolean string symbol 引用 ...

  9. JavaScript数据类型 - Symbol

    ES5:对象的属性名只能是字符串,当给对象添加新属性时,很容易造成属性名冲突,从而覆盖了原有的属性. ES6:所以ES6中引入了symbol数据类型,他表示独一无二的值,避免了属性名的冲突,此时对象的 ...

随机推荐

  1. 轮播图-bxslider

    bxSlider下载+参数说明 “bxSlider”就是一款响应式的幻灯片js插件 bxSlider特性 充分响应各种设备,适应各种屏幕: 支持多种滑动模式,水平.垂直以及淡入淡出效果: 支持图片.视 ...

  2. 关于jquery.unobtrusive-ajax.js 回调函数无效 的解决办法

    今天新项目的时候写MVC的时候使用到了Ajax.BeginForm,发现它的回调函数怎么都不响应,最后在网上查找了相关资料跟自己写的一些代码测试, 总算找到了原因:jquery.unobtrusive ...

  3. 一篇文章,学会jmeter模拟文件上传、下载操作

    最近很多同学都在问jmeter上传,下载文件的脚本怎么做? 正巧这阵子忙完有时间,就来“折腾”一番,哈哈 现整理出来和大家分享 到底该怎么做? 一.准备工作: 上传接口一个(自行开发解决了) 下载接口 ...

  4. 题解 CF296B 【Yaroslav and Two Strings】

    题目 传送门 题目大意 如果两个只包含数字且长度为 \(n\) 的字符串 \(s\) 和 \(w\) 存在两个数字 \(1≤i,j≤n\),使得 \(s_i<w_i,s_j>w_j\) , ...

  5. Monster Audio 使用教程(二)效果参数的保存

    点击左上角主菜单按钮,点击[保存]菜单,即可保存当前的所有效果参数. [另存为]菜单,则是把当前参数另存一个名称,然后通过[切换效果]菜单,实现效果的切换.  独立保存单个音轨的效果 点击音轨对应的[ ...

  6. springboot(五)使用FastJson返回Json视图

    FastJson简介: fastJson是阿里巴巴旗下的一个开源项目之一,顾名思义它专门用来做快速操作Json的序列化与反序列化的组件.它是目前json解析最快的开源组件没有之一!在这之前jaskJs ...

  7. IO流——转换流、缓冲流

    一.转换流 1. OutputStreamWriter类 属于字符输出流,OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的字符编码表,将要写入流中的字符编码成字节. 它的作 ...

  8. 第十一章 容器类&新日期时间

    11.1.Optional 容器类 11.1.1.概述 Optional 类是一个容器类,代表一个值存在或不存在, 原来用 null 表示一个值不存在,现在 Optional类 可以更好的表达这个概念 ...

  9. 修改docker中mysql登入密码(包括容器内和本地远程登入的密码)

    查看docker中正在运行的容器 docker ps 进入MySQL 容器中 sudo docker exec -it cd800a1cd503 /bin/bash 在容器中: /etc/mysql/ ...

  10. Python File write() 方法

    概述 write() 方法用于向文件中写入指定字符串.高佣联盟 www.cgewang.com 在文件关闭前或缓冲区刷新前,字符串内容存储在缓冲区中,这时你在文件中是看不到写入的内容的. 如果文件打开 ...