#基本用法

##最新的 ECMAScript 标准定义了 7 种数据类型:
6 种 原始类型:
Boolean
Null
Undefined
Number
String
Symbol (ECMAScript 6 新定义)
Object

let

{
let a = 10;
var b = 1;
}

a //ReferencenError: a is not defined.
b //1
let用来声明变量,用法类似于var,但是只在let命令所在的代码块有效。

typeof (并不是一个安全的操作)

操作符返回一个字符串,指示未经计算的操作数的类型。
typeofd的一些返回值

Undefined	"undefined"
Null	"object" (见下方)
Boolean	"boolean"
Number	"number"
String	"string"
Symbol (ECMAScript 6 新增)	"symbol"
宿主对象(由JS环境提供)	Implementation-dependent
函数对象 ( [[Call]] 在ECMA-262条款中实现了)	"function"
任何其他对象	"object"

##快级作用域

function f1(){
    let n = 5;
    if(true){
        let n=10;    
    }
    console.log(n);//5
}

立即执行匿名函数

//IIFE写法
(function () {
var temp = …;

}());

//块级作用域写法
{
let temp = …;

}

另外,ES6也是规定函数本身的作用域,在其所在的块级作用域之内。

const命令

const用来声明变量,但是声明的是常量。一旦声明常量,常量的值就不能改变。

const PI = 3.1415

PI = 3;//PI 3.1415

const PI = 3;//PI 3.1415    

对常量的重新赋值并不会报错,只会默默的失败。
const 的作用域与let命令相同:只在声明所在的块级作用域内有效。

跨模块常量

const声明的常量值在当前代码块有效,如果想设置跨模块的常量可以采用如下写法:

// constants.js
export const A = 1;
export const B = 2;

//test.js
import * as constants from './constants';
console.log(constants.A);// 1
console.log(constants.B);// 2

 //test2.js
import {A,B} from './constants';
console.log(A);// 1
console.log(B);// 2

全局对象的属性

全局对象是最顶层的对象,在浏览器环境指的是window对象,在Node.js中指的是Global对象,在JavaScript语言中,所有的全局变量都是全局对象的属性。
ES6规定,var命令和function命令声明的全局变量属于全局对象的属性;let命令、const命令、class命令声明的全局变量,不属于全局对象的属性。

var a = 1;
//node.js中可以写成 global.a
//通用打法 this.a
window.a //1

let b = 1;
window.b //undefined