ES6简单入门
let
let命令用来声明块级作用域. 以前的JavaScript只有全局作用域和函数作用域, 没有块级作用域.
// 示例1:
if (1) {
var a = "hello";
let b = "world";
}
console.log( a ); // hello
console.log( b ); // b is not defined
// 示例2:
for (let i = 0; i < 10; i++) {
// do something
}
console.log(i); // ReferenceError: i is not defined
// 示例3.1:
var a = [];
for (var i = 0; i < 10; i++) {
a[i] = function () {
console.log(i);
};
}
console.log( i );
console.log( a[6]() ); // 10
// 循环结束后i的值为10, a[6](), 相当于a[6](10), 所以输出10
// 示例3.2:
var a = [];
for (let i = 0; i < 10; i++) {
a[i] = function () {
console.log(i);
};
}
console.log( a[6]() ); // 6
// 循环结束后, i不再能够被访问, 此时调用a[6](), 则相当于a[6](6), 输出6
不存在变量提升
// var 的情况
console.log(foo); // 输出undefined
var foo = 2;
// let 的情况
console.log(bar); // 报错ReferenceError
let bar = 2;
// 什么都不定义而直接输出
console.log(foo2); // 报错ReferenceError
报错与输出undefined大不一样, undefined是JavaScript里的值, 而报错则程序中断运行.
const
const声明一个只读的常量. 一旦声明, 常量的值就不能改变.
const PI = 3.1415;
PI // 3.1415
// 为const变量重新赋值报错
PI = 3; // TypeError: Assignment to constant variable.
// 由const变量不能在其后赋值, 所以在声明的同时必须同时赋值, 否则报错
const foo; // SyntaxError: Missing initializer in const declaration
const的变量作用域等其它特性都与let相同
箭头函数
ES6允许使用箭头(=>
)定义函数. 一个箭头函数表达式的语法比一个函数表达式更短.
语法
首先箭头函数一般用来简化使用函数表达式来定义的函数, 总体理解就是箭头左边是函数的参数, 箭头
右边是函数的返回值或者函数体.
var func1 = (param1, param2, paramN) => expression; // 相当于
var func2 = function (param1, param2, paramN) { return expression };
// 注意下面的statements加了大括号
var func10 = (param1, param2, paramN) => { statements }; // 相当于
var func11 = function (param1, param2, paramN) { statements };
// Parentheses are optional when there's only one parameter name:
// 函数参数只有1个, 则参数外层的括号可省略
var func3 = (singleParam) => { statements }; // 相当于
var func4 = singleParam => { statements } // 相当于
var func5 = function (singleParam) { statements };
// A function with no parameters should be written with a pair of parentheses.
// 函数没有参数, 参数外层的括号不可省略
var func6 = () => { statements }; // 相当于
var func7 = function () { statements };
// Parenthesize the body of function to return an object literal expression:
// 函数的返回值是1个对象, 则需要额外加一层小括号(因为原来的大括号当包围函数体的用途)
var func8 = params => ({name: sheng});
var func9 = function (params) { return {name: sheng} };
强烈推荐这个网站http://babeljs.io/repl, 把自己写的箭头函数, 复制粘贴到该网站左边的框
里, 该网站就会自动帮你解析成ES3/5版本.
简单示例
var sayHello = () => "hello-world";
console.log( sayHello() );
Class
ES6标准的定义的class
并不是推翻了已经存在JavaScript基于原型的继承方式, 新的class
,
写法只是让我们看起来更清晰, 更像传统的面向对象编程.class
, 实际上是1个特殊的函数.
// 传统写法
function Point(x, y) {
this.x = x;
this.y = y;
}
Point.prototype.toString = function () {
return '(' + this.x + ', ' + this.y + ')';
};
var p = new Point(1, 2);
// class写法
//定义类
class Point {
constructor(x, y) {
this.x = x;
this.y = y;
}
toString() {
return '(' + this.x + ', ' + this.y + ')';
}
}
模板字符串
模板字符串是增强版的字符串, 使用反引号标识. 提供嵌入表达式, 插入变量, 保留换行等功能.
语法
`string text`
`string text line 1
string text line 2`
`string text ${expression} string text` // ${} 是固定用法
用法
// 在字符串中嵌入变量
var name = "Bob", time = "today";
`Hello ${name}, how are you ${time}?`
// 多行字符串
console.log(`
string text line 1
string text line 2
string text line 3
`);
console.log("\
string text line 1\
string text line 2\
string text line 3\
");
//
相关链接
Babel REPL: http://babeljs.io/repl, 该工具非常强大, 在线把ES6语法解析成其兼容版本.
本文大部分内容都参考自此书: http://es6.ruanyifeng.com/
箭头函数 - MDN
ES6简单入门的更多相关文章
- koa2入门--01.ES6简单复习、koa2安装以及例子
1.ES6简单复习 /*let 和 const: let用于定义一个块作用域的变量,const 定义一个常量 */ let a = 'test'; const b = 2; /*对象的属性和方法的简写 ...
- Vue的简单入门
Vue的简单入门 一.什么是Vue? vue.js也一个渐进式JavaScript框架,可以独立完成前后端分离式web项目 渐进式:vue可以从小到控制页面中的一个变量后到页面中一块内容再到整个页面, ...
- python 全栈开发,Day88(csrf_exempt,ES6 快速入门,Vue)
BBS项目内容回顾 1. 登陆页面 1. 验证码 1. PIL(Pillow) 2. io 2. ORM 1. 增删改查 3. AJAX $.ajax({ url: '', type: '', dat ...
- es6 快速入门 系列
es6 快速入门(未完结,持续更新中...) 前言 为什么要学习es6 es6对于所有javaScript开发者来说,非常重要 未来,es6将构成javaScript应用程序的基础 es6中很多特性, ...
- es6 快速入门 系列 —— 变量声明:let和const
其他章节请看: es6 快速入门 系列 变量声明:let和const 试图解决的问题 经典的 var 声明让人迷惑 function demo1(v){ if(v){ var color='red' ...
- es6 快速入门 系列 —— promise
其他章节请看: es6 快速入门 系列 Promise Promise 是一种异步编程的选择 初步认识Promise 用 Promise 来实现这样一个功能:发送一个 ajax,返回后输出 json ...
- es6快速入门 系列 - async
其他章节请看: es6 快速入门 系列 async 前文我们已经知道 promise 是一种异步编程的选择.而 async 是一种用于执行异步任务更简单的语法. Tip:建议学完 Promise 在看 ...
- es6 快速入门 系列 —— 类 (class)
其他章节请看: es6 快速入门 系列 类 类(class)是 javascript 新特性的一个重要组成部分,这一特性提供了一种更简洁的语法和更好的功能,可以让你通过一个安全.一致的方式来自定义对象 ...
- es6 快速入门 系列 —— 对象
其他章节请看: es6 快速入门 系列 对象 试图解决的问题 写法繁杂 属性初始值需要重复写 function createPeople(name, age){ // name 和 age 都写了 2 ...
随机推荐
- anaconda指定镜像源,解决conda下载速度慢失败问题
conda升级默认官网地址,速度会特别慢,现在我们指定一个当前可用的镜像,步骤如下: 1.执行命令,生成.condarc文件 conda config --add channels https://m ...
- libubox-blob/blobmsg
大部分内容来自libubox [3] - BLOB BLOGMSG,推荐阅读原文. blob提供二进制数据处理能力.有几种支持的数据类型,并可以创建块数据在socket上发送.整型数字会在libubo ...
- mysql information_schema 数据库简介:
.CHARACTER_SETS 表 CREATE TEMPORARY TABLE `CHARACTER_SETS` ( `CHARACTER_SET_NAME` varchar() NOT NULL ...
- Zookeeper实战
这里的实战主要是用Java API对Zookeeper进行相应的操作,来实现我们的业务需求.首先简单地测试一下Zookeeper节点的增删改查操作,然后测试两个例子,分别是分布式应用HA以及分布式锁. ...
- MongoDB 连接数高产生原因及解决
MongoDB Sharding架构下连接数很容易达到很高,这里连接数分为几个概念:tcp 连接数 netstat可以统计的,一般这个是最高.如果mongod/mongos在同一台服务器,更明显.参考 ...
- yum 安装出错--"Couldn't resolve host 'mirrors.aliyun.com'"
1.yum 安装出错 [root@iz25m0z7ik3z ~]#yum install mysql [root@iZ25m0z7ik3Z ~]#yum install mysql Loaded pl ...
- OracleHelper.cs
using System;using System.Collections.Generic;using System.Linq;using System.Text; using System.Conf ...
- 一行代码解决各种IE兼容问题,IE6,IE7,IE8,IE9,IE10 (转)
x-ua-compatible 用来指定IE浏览器解析编译页面的model x-ua-compatible 头标签大小写不敏感,必须用在 head 中,必须在除 title 外的其他 meta 之前使 ...
- Linux服务器 大量的CLOSE_WAIT、TIME_WAIT解决办法
http://itindex.net/detail/50213-%E6%9C%8D%E5%8A%A1%E5%99%A8-time_wait-close_wait http://itindex.net/ ...
- 【转】防止CListCtrl闪烁的几种方法
转载出处:http://blog.sina.com.cn/s/blog_5ee42ba30100g50j.html 1.使用SetRedraw禁止窗口重绘,操作完成后,再恢复窗口重绘 m_ctlLis ...