一、var let const

1、var

(1)声明提升(把所有变量声明都拉到函数作用域的顶部)

  1. console.log(name); // undefined
  2. var name = 'Matt';
  3. //等价于
  4. var name;
  5. console.log(name); // undefined
  6. name = 'Matt';

(2)全局声明,会成为windows对象

  1. var name = 'Matt';
  2. console.log(window.name); // 'Matt'

2、let

(1)暂时性死区

  1. console.log(age); // ReferenceError:age 没有定义
  2. let age = 26;

(2)全局声明,不会成为windows属性

  1. let age = 26;
  2. console.log(window.age); // undefined

(3)条件声明不可以使用let
(4)for循环使用let声明迭代变量的优点⬇️

  1. //1.避免迭代变量渗透到外部
  2. for (var i = 0; i < 5; ++i) { // 循环逻辑
  3. }
  4. console.log(i); // 5
  5. for (let i = 0; i < 5; ++i) { // 循环逻辑
  6. }
  7. console.log(i); // ReferenceError: i 没有定义
  8. //2.为每个迭代循环声明一个新的迭代变量
  9. for (var i = 0; i < 5; ++i) {
  10. setTimeout(() => console.log(i), 0)
  11. }
  12. // 实际上会输出5、5、5、5、5
  13. for (let i = 0; i < 5; ++i) {
  14. setTimeout(() => console.log(i), 0)
  15. }
  16. // 会输出0、1、2、3、4

3、const

(1)声明变量时必须同时初始化变量
(2)const声明的变量,只限制修改其指向,如果指向的是一个对象,可以修改对象内部的属性
(3)不适用于for循环,但适用于for in 和 for of

  1. for (const key in {a: 1, b: 2}) {
  2. console.log(key);
  3. }
  4. // a, b
  5. for (const value of [1,2,3,4,5]) {
  6. console.log(value);
  7. }
  8. // 1, 2, 3, 4, 5

4、最佳实践

优先使用const,确定未来会修改使用let,不使用var

二、数据类型

1、原始类型6种
(1)Undefined
(2)Null (undefined == null)
(3)Boolean
(4)Number
Number()
布尔值 true返回1 false返回0
数值 直接返回
null 返回0
undefined 返回NaN
(5)String
(6)Symbol
2、引用类型
Object Array Function
3、typeof操作符
undefined未定义、boolean布尔值、string字符串、number数值、对象(非函数)或null、function函数、symbol符号。

其他

BOM
navigator 对象,提供关于浏览器的详尽信息;
location 对象,提供浏览器加载页面的详尽信息;
screen 对象,提供关于用户屏幕分辨率的详尽信息;
performance 对象,提供浏览器内存占用、导航行为和时间统计的详尽信息;

script
1、script标签通常放在html内容的结尾处,从而加快页面的渲染速度。
2、defer=”defer” 可以使脚本立即下载,但延迟执行(浏览器解析到标签后才执行),由于实际加载顺序的不确定性,最好只包含一个带有defer属性的script。defer只适用于外部脚本。
3、async=”async’,异步执行脚步,目的是告诉浏览器不必等待脚本下载和执行完成后再加载页面,异步脚本不应该在加载期间修改DOM,与defer的区别是,async脚本之间没有依赖关系。async只适用于外部脚本。
4、动态加载脚本

  1. let script = document.createElement('script');
  2. script.src = 'gibberish.js';
  3. script.async = false;
  4. document.head.appendChild(script);

5、尽可能把js代码放在外部文件中,便于维护,且浏览器会对其进行缓存。