1.js运算符(基础)
按位与 &、按位或 |、按位异或 ^、按位非~、零填充左位移 <<、有符号右位移>>、零填充右位移>>>
【摘自一起走过的日子……:原文链接】Java中的<< 和 >> 和 >>> 详细分析
【摘自@Umbrella :原文链接】Javascript中的 位运算符 + 使用场景 + 性能对比 + 封装
2. 声明变量的方式var 、let、const的特点
【摘自lydia121:原文链接】let,const以及var三者的区别,面试经常会问哦!
1. es6新增的声明变量的方式 let,特点:
a. 作用域是块级作用域(在ES6之前,js只存在函数作用域以及全局作用域);
{
let a =100;
console.log(a); //100
}
b. 不存在变量声明提前;
{
console.log(a);
let a =100;// 报错 Uncaught ReferenceError: Cannot access 'a' before initialization
at <anonymous>:2:17
}
c. 不能重复定义;
{
let a =100;
let a =200;
console.log(a);//报错
}
d. 存在暂时性死区:可以这样来理解;
var a=1;
if(true){
console.log(a)
let a=2;
}
① 在一个块级作用域中,变量唯一存在,一旦在块级作用域中用let声明了一个变量,那么这个变量就唯一属于这个块级作用域,不受外部变量的影响;
② 无论在块中的任何地方声明了一个变量,那么在这个块级作用域中,任何使用这个名字的变量都是指这个变量,无论外部是否有其他同名的全局变量;
③ 暂时性死区的本质就是,只要一进入当前作用域,所要使用的变量就已经存在了,但是不可获取,只有等到声明变量的那一行代码出现,才可以获取和使用该变量。
④ 暂时性死区的意义:让我们标准化代码。将所有的变量的声明放在作用域的最开始。
2. es6新增的声明变量的方式const ,特点:
a.用于声明常量,初始化时必须赋值;
b.只读不允许重新赋值,并且也不能重复定义;
c.与let一样,都是块级作用域;
d.存在暂时性死区;
e.不存在变量提升;
{
const a=1;(重新给常量a赋值会报错 )
a=3;// Uncaught TypeError: Assignment to constant variable.(错误:赋值给常量)
}
3. es5声明变量的方式var ,特点:
a.es5以前没有块级作用域,var属函数作用域;在某函数中声明一个变量,则此变量只作用域此函数内;
b.存在变量提升;
————————————————
【问】let,const声明的变量在Window中无法获取到的问题?
【摘自alex夏夜:原文链接】-原文(关于let声明的变量在window里无法获取到的问题)
- ES5中声明变量的方式只有两种: var 、 function;
- ES6新增 4种声明变量的方式let、const、import、class,加上ES5总共6种;
- 还需要了解顶层对象:浏览器环境中顶层对象是window,Node中是global对象;
- ES5中,顶层对象的属性等价于全局变量。;
- ES6中,有所改变:var、function声明的全局变量,依然是顶层对象的属性;let、const、class声明的全局变量不属于顶层对象的属性,也就是说ES6开始,全局变量和顶层对象的属性开始分离、脱钩。 —《引用:alex夏夜》
/文中有错误和不对的地方欢迎大家批评指正;文中多处引用各位大佬的内容和链接已经署名。/