一、介绍
1.包含:核心、文档对象模型、浏览器对象模型
二、HTML中的JavaScript
1.<script>元素
将JavaScript插入HTML的主要方法是使用<script>元素 ,script有8个属性。
注:在<script>元素中的代码被计算完成之前,页面的其余内容不会被加载,也不会被显示
使用方式:
(1)直接在网页中嵌入JavaScript代码
(2)用src属性引用外部文件
2.标签位置:将所有JavaScript引用放在<body>元素中的页面内容后面(原因:在处理JavaScript代码之前完全渲染页面。用户会感觉页面加载更快了)。传统的,放在<head>里,也就意味着必须把所有JavaScript代码都下载、解析和解释完成后,才能开始渲染页面。
(1)设置defer属性:它将会延迟到整个页面都解析完毕后再运行,但仅适用于引用外部脚本文件
(2)异步执行脚本(async属性)脚本将可能不会按照它们出现的次序执行。
(3)XHTML:XHTML中编写代码的规则比HTML中严格。
需要避免语法错误:
①<都替换成对应的HTML实体形式<
②把所有代码都包含到一个CDATA块中,其内容不作为标签来解析。
(4)<noscript>元素:,被用于给不支持JavaScript的浏览器提供替代内容
JavaScript代码如果分散到很多HTML页面,会导致维护困难。而用一个目录保存所有JavaScript文件,则更容易维护。
三、语法
1.在脚本开头加上 预处理。
2.var声明作用域
(1)
使用var操作符定义的变量会成为包含它的函数的局部变量。
在函数内定义变量时省略var操作符,可创建一个全局变量。
(2)使用Var关键字声明的变量会自动提升到函数作用域顶部:
3.let与Var的区别:
(1)let声明的范围是块作用域,而var声明的范围是函数作用域。
(2)let也不允许同一个块作用域中出现冗余声明,而var允许。
(3)let声明的变量不会在作用域中被提升,而var会。
(4)let在全局作用域中声明的变量不会成为window对象的属性,var则会。
(5)for循环中 var定义的迭代变量i会渗透到循环体外部,而let则不会。
(6)使用let声明迭代变量(迭代变量会自增)时,JavaScript引擎在后台会为每个迭代循环声明一个新的迭代变量
4.const声明
const的行为与let基本相同,主要的区别是用它声明变量时必须同时初始化变量,且不能修改Const声明的变量(对象除外)
总结:不使用var,const优先,let次之
1.数据类型
使用typeof操作符,将返回Undefined、Null、Boolean、Number、String和Symbol字符串之一。
string类型:字符串可以使用双引号(")、单引号(')或反引号(`)
转换为字符串:
2.操作符
一元加:对数值没有任何影响;应用到非数值,会类型转换。
一元减:用于把数值变成负值
(2)与或非、左移什么的,学过计组的都知道,easy,省略....。
(3)函数:函数使用function关键字声明,后跟一组参数,然后是函数体
四、
(1)复制:原始值是再创建一个变量‘而引用值(new的)是直复制指针,属于同一个。
(2)上下文:每个上下文都有一个关联的变量对象,上下文中定义的所有变量和函数都存在于这个对象上。上下文在其所有代码都执行完毕后会被销毁,包括定义在它上面的所有变量和函数(全局上下文在应用程序退出前才会被销毁,比如关闭网页或退出浏览器)。每个函数调用都有自己的上下文。当代码执行流进入函数时,函数的上下文被推到一个上下文栈上。在函数执行完之后,上下文栈会弹出该函数上下文,将控制权返还给之前的执行上下文
(3)日期:创建日期对象,就使用new操作符来调用Date构造
Date.parse():接收一个表示日期的字符串参数
Date.UTC():返回日期的毫秒表示
(4)RegExp:正规表达式
(5)eval():当解释器发现eval()调用时,会将参数解释为实际的ECMAScript语句
通过eval()定义的任何变量和函数都不会被提升
(6)URL编码方法:
encodeURI()和encodeURIComponent()方法用于编码统一资源标识符(URI),以便传给浏览器
(7)window对象,所有全局作用域中声明的变量和函数都变成是window的属性
(8)Math对象属性:作为保存数学公式、信息和计算的地方。Math对象提供了一些辅助计算的属性和方法