刘总的笔记小站

生活常识,娱乐搞笑,编程技巧,智能家居,深度学习,网络神经,数据挖掘

ECMAScript 6入门常用语法总结


ECMAScript 6入门常用语法及知识总结

一,语言特性,es6新增加的特性

ES6增加了let和const声明,以及箭头函数,ES6规定暂时性死区和修订变量提,块级作用域,ES5只有全局作用域和函数作用域

javascript最大特点异步回调,闭包函数,动态绑定


二,语言特性,作用域变化

ES5规定,函数只能在顶层作用域和函数作用域之中声明,不能在块级作用域声明

ES6引入了块级作用域,明确允许在块级作用域之中声明函数。块级作用域之外不可引用

if (true) {function f() {}} // 非法,浏览器提前支持都能运行,不会报错

try {function f() {} } catch(e) { }// 非法,浏览器提前支持都能运行,不会报错

考虑到环境差异太大,避免在块级作用域内声明函数,应该写成函数表达式,而不是函数声明语句。

// 函数声明语句 {let a = 'secret';function f() {return a;}}

// 函数值表达式 {let a = 'secret';let f = function () {return a;};}


三,ES6新增了 let 命令,用来声明变量。它的用法类似于 var ,但是所声明的变量,只在 let 命令所在的代码块内有效

let 不像 var 那样会发生“变量提升”现象。所以,变量一定要在声明后使用,否则报错。


四,const命令 const 声明一个只读的常量。一旦声明,常量的值就不能改变。

const 的作用域与 let 命令相同:只在声明所在的块级作用域内有效。同样存在暂时性死区。

复合类型的变量,变量名不指向数据,而是指向数据所在的地址。只是保证指向的地址不变,不保证数据。

const foo = {};foo.prop = 123;foo.prop// 123  foo = {}; // TypeError: "foo" is read-only

如果真的想将对象冻结,应该使用 Object.freeze 方法。 const foo = Object.freeze({});

// 常规模式时,下面一行不起作用;// 严格模式时,该行会报错 foo.prop = 123;


五,其他语法特性

对象的解构赋值,字符串的解构赋值,数值和布尔值的解构赋值,函数参数的解构赋值,圆括号问题。

不能使用圆括号的情况,可以使用圆括号的情况(赋值语句的非模式部分)模式指解构剥离预见圆括号

Promise yield async await 


六,语法误区代码示例

input.map(item => item + 1); es6->es5 Babel/Traceur input.map(function (item) {return item + 1;});
{let a = 10;var b = 1;} b // 1 ; a // ReferenceError: a is not defined. 
for (let i = 0; i < arr.length; i++) {} console.log(i);//ReferenceError: i is not defined
var a = []; for (var i = 0; i < 10; i++) { a[i] = function () {console.log(i);};} a[6](); // 10
var a = []; for (let i = 0; i < 10; i++) { a[i] = function () {console.log(i);};} a[6](); // 6
var tmp = 123; if (true) { tmp = 'abc'; // ReferenceError let tmp; }  //TDZ(temporal dead zone)
typeof x; // ReferenceError  let x; typeof undeclared_variable // "undefined"
function bar(x = y, y = 2) {return [x, y];}bar(); // error
function bar(x = 2, y = x) {return [x, y];}bar(); // [2, 2]
function func(arg) { let arg; // error }    function func(arg) { { let arg; // right } }
{{{let insane = 'Hello World'; {{let insane = 'Hello World';} console.log(insane); // error } }}};
'use strict';if (true) {function f() {} } // right
function f() { console.log('I am outside!'); } (function () {f();}()); //I am outside!

    Vue.component('edit-component', {
      data: function() { return { message: '' }; },
      methods: {
      send: function() {
          that = this;
          axios.post('/', $.param({ md: this.message })).then(function(response) {
              that.message = response.data.replace(/(^\s*)|(\s*$)/g, '');}); 
      } } }
     Date.prototype.Format = function(fmt) {} // run bind function



箭头函数总结:

1,箭头前面的是入参,不是一个参数参数需要用括号,推荐始终使用括号

2,箭头后面函数体一条语句可以省略大括号及分号,推荐单条语句可省略

3,箭头函数返回值取决函数体的return语句,匿名调用(箭头函数)(入参)

4,箭头函数作为普通入参,入参先传箭头入参,返回值传入普通函数参数

5,this在箭头函数中按照词法作用域绑定,返回对象x => ({ foo: x })


var funcWithThreeParam = (a, b, c) => { console.log(''); }

var funcWithThreeParam = (a,b) => { console.log(''); }

var funcWithThreeParam = (a) => { console.log(''); }

var funcWithThreeParam = () => { console.log(''); }

var funcWithThreeParam = a => { console.log(''); }

funcWithThreeParam(); // below call like ( fn )(a);

a => { console.log(''); }

a => console.log('')

() => console.log('')

(a) => console.log('')

(a,b) => console.log('')


JS数组和字典,JS 的数组Array,既是一个数组,也是一个字典(Dictionary)

var a = new Array();  a[0] = "Acer";  a[1] = "Dell";

var a = new Array();  a["Acer"] = 5;  a["Dell"] = 6;

for (var i in a) {  console.log(i + " : " + a[i]) };

Array .pop() .push() .sort() .reverse() a[num/key] a.key


123.toString(); // SyntaxError 123..toString(); // '123', (123).toString(); // '123'

typeof Number('123'); // 'number' typeof new Number(123); // 'object'

JSON.stringify(dic), JSON.parse(str)


不要使用new Number()、new Boolean()、new String()创建包装对象;

.用parseInt()或parseFloat()来转换任意类型到number;

.用String()来转换任意类型到string,或者直接调用某个对象的toString()方法;

.通常不必把任意类型转换为boolean再判断,因为可以直接写if (myVar) {...};

.typeof操作符可以判断出number、boolean、string、function和undefined;

.判断Array要使用Array.isArray(arr);

.判断null请使用myVar === null;

.判断某个全局变量是否存在用typeof window.myVar === 'undefined';

.函数内部判断某个变量是否存在用typeof myVar === 'undefined'。


结尾彩蛋,相关java面试问题,虽然很傻的问题,但就是考验你是否常用。

java: String length()   &     ArrayList lenght

java:try finally all have return will run finally 


发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
搜索
«   2024年9月   »
1
2345678
9101112131415
16171819202122
23242526272829
30
网站分类
最新留言
文章归档
网站收藏
友情链接
图标汇集
Powered by Z-BlogPHP

  • Copyright ©2021 @liuzong All rights reserved.
  • 陕ICP备17016542号