<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>01JAVASCRIPT基础</title> </head> <body> <!--说明 1 为了避免加载延迟,js放到body标签的最下面。 --> <!--1 引用方式 --> <!--1.1 引用外部文件--> <!--<script srr="1.js"> </script>--> <!--1.2 使用内部--> <!--<script>--> <!-- console.log("hello")--> <!--</script>--> <!--2 注释--> <!--单行注释 //--> <!--多行注释 /**/--> <!--3 代码的执行--> <!--从上往下按行执行,默认自动加分号(;),但有时会有问题,建议手动加分号(;)--> <!--4 变量声明并赋值--> <!--弱类型语言,不必指定变量的类型,变量的类型根据变量的值而变化。--> <!--<script>--> <!-- var web = "hello";--> <!-- console.log(typeof web); //string--> <!-- web = 99;--> <!-- console.log(typeof web); //number--> <!-- web = {};--> <!-- console.log(typeof web); //object--> <!--</script>--> <!--5 变量提升 var声明变量--> <!-- js中的关键字是不可以使用的,比如 if while class--> <!--解析器会先解析代码,然后把声明的变量的声明提升到最前,这就叫做变量提升。--> <!--<script>--> <!-- console.log(web); //undefined--> <!-- var web = "hello";--> <!--</script>--> <!--以上代码等价与--> <!--<script>--> <!--// 声明变量--> <!-- var web;--> <!-- console.log(web); //undefined--> <!--// 赋值变量--> <!-- web = "hello";--> <!--</script>--> <!-- 总结: 使用 var 定义的代码,声明会被提升到前面,赋值还在原位置。 var声明变量时推荐先提前声明后再使用。 --> <!--6 let&const暂时性死区TDC--> <!-- (1) TDZ 又称暂时性死区,指变量在作用域内已经存在,但必须在let/const声明后才可以使用。 (2) TDZ 可以让程序保持先声明后使用的习惯,让程序更稳定。 1) 变量要先声明后使用 2) 建议使用 let/const 而少使用 var (3) 使用let/const 声明的变量在声明前存在临时性死区(TDZ)使用会发生错误 --> <!--<script>--> <!-- let web = "hello";--> <!-- const name = "lc";--> <!-- console.log(web, name) //hello lc--> <!--</script>--> <!--7 var-let-const的共同点--> <!-- (1) var/let/const共同点是全局作用域中定义的变量,可以在函数中使用 (2) 函数中声明的变量,只能在函数及其子函数中使用 (3) 函数中声明的变量就像声明了私有领地,外部无法访问 --> <!--8 var/let/const声明变量的区别--> <!--8.1 var--> <!--使用 var 声明的变量存在于最近的函数或全局作用域中,没有块级作用域的机制。--> <!--没有块作用域很容易污染全局--> <!--8.2 let--> <!--与 var 声明的区别是 let/const 拥有块作用域--> <!--8.3 const--> <!--与 var 声明的区别是 let/const 拥有块作用域--> <!--使用 const 用来声明常量,这与其他语言差别不大,比如可以用来声明后台接口的 URI 地址。--> <!-- 常量名建议全部大写 只能声明一次变量 声明时必须同时赋值 不允许再次全新赋值 可以修改引用类型变量的值 拥有块、函数、全局作用域 --> <!--9 window全局对象污染与重复声明--> <!-- (1) let/const 全局声明的变量不存在于window对象中。 var 全局声明的变量存在于window对象中。 (2) let/const 声明后的变量不允许在同一作用域中重新声明,不同作用域可以重新声明。 var 在同一作用域中可以重复声明。 --> <!--<script >--> <!--let screenLeft = 88;--> <!--console.log(window.screenLeft); //605--> <!--console.log(screenLeft); //88--> <!--</script>--> <!--<script>--> <!-- var web = "123"--> <!-- var web = "123456"--> <!-- console.log(web) //123456--> <!--</script>--> <!--10 Object.freeze冻结变量--> <!--<script>--> <!-- // 使用严格模式,让用户感知错误,提示已经锁定常量的引用类型且无法进行修改--> <!-- "use strict";--> <!-- const HOST = {--> <!-- url: 'https://www.baidu.com',--> <!-- port: 443--> <!-- };--> <!-- // 常量的引用类型值可以修改,为了避免修改可以进行锁定常量的引用类型--> <!-- Object.freeze(HOST);--> <!-- HOST.port = 80;--> <!-- console.log(HOST); //{url: 'https://www.baidu.com', port: 443}--> <!--</script>--> <!--11 标量与引用类型的传值与传址特性--> <!--<script>--> <!--<!–字符串和数值类型传的是值(标量类型),对象传的是地址(引用类型)–>--> <!--// 传值--> <!--let a = 1;--> <!--let b = a;--> <!--console.log(a, b); // 1 1--> <!--b = 3;--> <!--console.log(a, b); // 1 3--> <!--// 传址--> <!--let e = {name: "hello"};--> <!--let f = e;--> <!--console.log(e ,f); // {name: 'hello'} {name: 'hello'}--> <!--f.name = "world";--> <!--console.log(e, f); // {name: 'world'} {name: 'world'}--> <!--</script>--> <!-- (1) 基本类型复制是值的复制,互相不受影响。 (2) 对于引用类型来讲,变量保存的是引用对象的指针。变量间赋值时其实赋值是变量的指针,这样多个变量就引用的是同一个对象。 --> <!--12 null与undefined详解--> <!--null 用于定义一个空对象,即如果变量要用来保存引用类型,可以在初始化时将其设置为 null--> <!--null 针对引用类型,undefined针对的是值类型--> <!--null 引用类型--对象,undefined 基本类型--字符串--没有值--> <!--<script>--> <!-- let a;--> <!-- let b = null;--> <!-- console.log(typeof a, typeof b); // undefined object--> <!-- function show(name) {--> <!-- console.log(name) //(函数参数未传值)undefined--> <!-- }--> <!-- console.log(show()) //(函数没有返回值)undefined--> <!--</script>--> <!-- (1) 未赋值与未定义的变量值都为 undefined,建议声明变量设置初始值,这样就可以区分出变量状态了。 (2) 函数参数不传值或无返回值是为undefined。 (3) null 用于定义一个空对象,即如果变量要用来保存引用类型,可以在初始化时将其设置为 null。 --> <!--13 use strict严格模式高质量代码守卫--> <!-- (1) 严格模式要求变量必须要有声明关键字,比如 var/let/const 。 (2) 严格模式可以让我们及早发现错误,使代码更安全规范,推荐在代码中一直保持严格模式运行。 (3) 严格模式对当前作用域及子作用域影响。 --> <!--<script>--> <!-- "use strict";--> <!-- web = "hello world"--> <!-- console.log(web) // Uncaught ReferenceError: web is not defined--> <!--</script>--> </body> </html>