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 为什么只需一条语句“a,b=b,a”,就能直接交换两个变量?
从接触 Python 时起,我就觉得 Python 的元组解包(unpacking)挺有意思,非常简洁好用. 最显而易见的例子就是多重赋值,即在一条语句中同时给多个变量赋值: >>> ...
- 实践使用nodejs获取用户真实IP?
先上代码 var http = require('http') var server = http.createServer(function (req,res) { console.log(req. ...
- 集训作业 洛谷P1135 奇怪的电梯
这个题我见过!!! 我之前在石油大学的网站上做练习赛,提高了很多,这个题是我第一次在比赛里见到深搜. 当时蒙蔽的一批,现在发现好简单…… 这个题和普通的深搜没什么区别,甚至可以说简单了,因为这个是1维 ...
- vue : 本地调试跨域问题的解决办法:proxyTable
本来我是不想写的,但为了加深印象还是写一写吧. ./config/index.js module.exports = { dev: { // Paths assetsSubDirectory: 'st ...
- python多进程之multiprocessing
什么是多进程? 简单的理解:单板上运行的一个程序就是一个进程.进程是操作系统分配资源的最小单位,不同的进程之间资源不共享,进程间通信需要使用特定的方式.python提供了自带的multiprocess ...
- Docker 入门教程(2)——image与container
image镜像 Definition of: image Docker images are the basis of containers. An Image is an ordered colle ...
- Git报错问题集锦
git merge合并时遇上refusing to merge unrelated histories的解决方案 如果git merge合并的时候出现refusing to merge unrelat ...
- 使用iOS网络请求
https://github.com/yuantiku/YTKNetwork/blob/master/Docs/2.0_MigrationGuide_cn.md
- idea2020安装教程
2019最新版IDEA亲测可用, 2020最新版IDEA亲测可用, 重要的事说三遍: 如果自己破解不成功建议加群咨询群主:422167709 成功的也可以进群交流 激活码1 N757JE0KCT- ...
- 删除表中重复数据,只删除重复数据中ID最小的
delete t_xxx_user where recid in ( select recid from t_xxx_user where recid in ( select min(recid) f ...