ECMAScript6新增数据类型symbol数据类型
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数据类型的更多相关文章
- ES6的新增数据类型:Symbol
简介:Symbol类型是es6新增的一个数据类型,Es5的基本数据类型(undefined,null,Object,function,Number,string) Symbol值通过Symbol函数生 ...
- ES6 新增基本数据类型Symbol
ES6 增加了一个新的基本数据类型 symbol. 不过,和其他基本数据类型相比,它有点与众不同,因为它没有字面量的表现形式,而且创建的方式也有点奇怪,只能通过调用全局函数Symbol()来完成. l ...
- ES6新增数据类型Symbol
Symbol的含义? ES6(2015) 引入了第七种原始数据类型Symbol,Symbol英文文意思为 符号.象征.标记.记号,在 js 中更确切的翻译应该为独一无二的 Symbol的使用? Sym ...
- 基本数据类型 Symbol
ES6 规范之前, JavaScript 一共有六种数据类型,分别是五种基本数据类型: string . number , boolean , null , undefined ,和一种引用数据类型: ...
- JS中的Symbol数据类型
最初JS的6种数据类型: null,undefined,boolean,number,string,object 注意:实际上,array和function都是属于object的子类 ES6中,新增了 ...
- ES6 之 第七种数据类型Symbol
概述 为了减少对象的属性名冲突,ES6引入新的原始数据类型Symbol,JS的第七种数据类型. Symbol 能够保证每个属性的名字都是独一无二,这样就能从根本上防止属性名冲突. Symbol 值能够 ...
- ES6中的新数据类型——Symbol
今天小编和大家来聊一聊es6中新增的一个原始数据类型Symbol.在es5中原始数据类型(基本数据类型)有以下六种:Undefind.Null.Bool. String.Number.Object.今 ...
- ES6——Symbol数据类型
什么是 Symbol ? Symbol 表示独一无二的值,他是js中的 第七种数据类型. 基本的数据类型:null, undefined number boolean string symbol 引用 ...
- JavaScript数据类型 - Symbol
ES5:对象的属性名只能是字符串,当给对象添加新属性时,很容易造成属性名冲突,从而覆盖了原有的属性. ES6:所以ES6中引入了symbol数据类型,他表示独一无二的值,避免了属性名的冲突,此时对象的 ...
随机推荐
- Python函数03/函数名的第一类对象及使用/f 格式化/迭代器/递归
Python函数03/函数名的第一类对象及使用/f 格式化/迭代器/递归 目录 Python函数03/函数名的第一类对象及使用/f 格式化/迭代器/递归 内容纲要 1.函数名的第一类对象及使用 2.f ...
- Apache Hudi重磅特性解读之存量表高效迁移机制
1. 摘要 随着Apache Hudi变得越来越流行,一个挑战就是用户如何将存量的历史表迁移到Apache Hudi,Apache Hudi维护了记录级别的元数据以便提供upserts和增量拉取的核心 ...
- c++运行程序 改变字和背景的颜色与窗口大小和位置 (c++)(windows)
关于改变字体的颜色和背景颜色: 在#include <windows.h> 库里 0=黑色 1=蓝色 2=绿色 3=湖蓝色 4=红色 5=紫色 6=黄色 7=白色 8=灰色 9=淡蓝色 A ...
- OSCP Learning Notes - Capstone(3)
DroopyCTF Walkthrough Preparation: Download the DroopyCTF virtual machine from the following website ...
- Python Ethical Hacking - BACKDOORS(6)
File Upload: A file is a series of characters. Uploading a file is the opposite of downloading a fil ...
- View Animation 运行原理解析
Android 平台目前提供了两大类动画,在 Android 3.0 之前,一大类是 View Animation,包括 Tween animation(补间动画),Frame animation(帧 ...
- JAVA集合四:比较器--类自定义排序
参考链接: HOW2J.CN 前言 对于JAVA集合,都能够用集合的工具类Collections 提供的方法: Collections.sort(List list) Collections.sort ...
- OpenLDAP 2.4.44 安装部署避坑指南
写在前面: 有关openLDAP的部署文档在网上随意能找到很多,但是最近用到才发现网上的教程多数是旧版的用法,例如"/etc/openldap/slapd.conf “早已弃用,更有甚者直接 ...
- CSS变形动画
CSS变形动画 前言 在开始介绍CSS变形动画之前,可以先了解一下学习了它之后能做什么,有什么用,这样你看这篇文章可能会有一些动力. 学习了CSS变形动画后,你可以为你的页面做出很多炫酷的效果,如一个 ...
- mybatis逆向工程生成java代码和xml配置
mybatis官方提供了一个逆向工程包,可以针对数据库表自动生成mybatis执行所需要的Pojo.Mapper xml文件.Mapper 接口文件. mybatis-generator有很多种用法: ...