01JAVASCRIPT基础
<!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>