JS核心语法是对JS基础语法的一个补充说明,本质上还是对ECMAScript语法的一个延伸和进阶。
1.一个前端网页主要由三门语言组成:
1. HTML:确定网页的结构
2..CSS:确定网页的样式
3..JavaScript:确定网页的行为(交互)
2.JavaScript作用?
确定网页的行为交互 (教网页做事请。)
3.JavaScript三个组成部分?
1.ECMAScript
2.DOM
3.BOM
1.0 .ECMAScript - JavaScript的核心
.ECMAScript定义了JavaScript的语言规范
.JavaScript的核心:描述了语言的基本语法和数据类型,ECMAScript是一套标准,定义了一种语言的标准与具体实现无关
2.0 .DOM-文档对象模型
·一套操作页面元素的API
. DOM可以把 HTML看做是文档树,通过DOM提供的API可以对树上的节点进行操作
3.0 .BOM-浏览器对象模型
·一套操作浏览器功能的API
·通过BOM可以操作浏览器窗口,比如:弹出框、控制浏览器跳转、获取分辨率等
4.JS代码的三种写法
1.行内写法:写在标签行内 (不推荐不便于维护)
2.内部写法︰写在script标签内部 (写在script标签中,如果界面JS代码较少可以使用)
3.外部写法:写在js外部文件中,使用script标签的src属性导入
(* 注意:如果script标签写了src属性,就表示外部写法。此时内部的js代码不会执行。)
5.计算机组成。
1.软件:
·应用软件:浏览器(chrome/ie/firefox)、QQ、Sublime、Word、webstorm
·系统软件: windows,Linux,unix,OSx,iOs,android
2.硬件:
·输入设备:鼠标,键盘,摄像头等
·输出设备:显示器,打印机,投影仪等
6.程序运行原理:
1.计算机将存储在硬盘中的html文件读取到内存中
2.浏览器内核编译器开始编译代码(cpu只能处理二进制数据,需要将我们写的代码转成二进制)
3.CPU处理与计算
4.CPU将我们代码在运行时产生的数据保存到内存中
7.==等于操作符
等于操作符用两个等于号(==)表示,如果操作数相等,则会返回true
在JavaScript 中存在隐式转换。等于操作符(==)在比较中会先进行类型转换,再确定操作数是否相等
遵循以下规则:
如果任一操作数是布尔值,则将其转换为数值再比较是否相等
1 let result1 = (true == 1); // true
如果一个操作数是字符串,另一个操作数是数值,则尝试将字符串转换为数值,再比较是否相等
1 let result1 = ("55"== 55); // true
8.===全等操作符
全等操作符由3个等于号(===)表示,只有两个操作数在不转换的前提下相等才返回true。即类型相同,值也需相同
1 let result1 = ("55"=== 55); // false,不相等,因为数据类型不同
2let result2 = (55 === 55); // true,相等,因为数据类型相同值也相同
undefined和null与自身严格相等
1 let result1 =(null === null) //true
2let result2 = (undefined === undefined) //true
JavaScript中的堆栈?
堆和栈
定义
- 栈(stack):栈会自动分配内存空间,会自动释放,存放基本类型(String,Number,Boolean,Null,Undefined,BigInt),简单的数据段,占据固定大小的空间。
- 堆(heap):动态分配的内存,大小不定也不会自动释放,存放引用类型(Function,Array,Object),指那些可能由多个值构成的对象,保存在堆内存中,包含引用类型的变量,实际上保存的不是变量本身,而是指向该对象的指针。
区别
栈:所有在方法中定义的变量都是放在栈内存中,随着方法的执行结束,这个方法的内存栈也自然销毁。
- 优点:存取速度比堆快,仅次于直接位于CPU中的寄存器,数据可以共享;
- 缺点:存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。
堆:堆内存中的对象不会随方法的结束而销毁,即使方法结束后,这个对象还可能被另一个引用变量所引用(参数传递)。创建对象是为了反复利用,这个对象将被保存到运行时数据区。
栈和堆的溢出
- 栈:可以递归调用方法,这样随着栈深度的增加,JVM维持着一条长长的方法调用轨迹,知道内存不够分配,产生栈溢出。
- 堆:循环创建对象,通俗点就是不断的new 一个对象。
ES6有哪些新特性?
1.let const的引入
let声明变量和const声明常量,两个都有块级作用域
ES5中是没有块级作用域的,并且var有变量提升,在let中,使用的变量一定要进行声明
2.箭头函数
ES6中的函数定义不再使用关键字function(),而是利用了()=>来进行定义
3.模板字符串
模板字符串是增强版的字符串,用反引号(`)标识,可以当作普通字符串使用,也可以用来定义多行字符串
4.解构赋值
ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值
5.for of循环
for…of循环可以遍历数组、Set和Map结构、某些类似数组的对象、对象,以及字符串
6.import、export导入导出
ES6标准中,Js原生支持模块(module)。将JS代码分割成不同功能的小块进行模块化,将不同功能的代码分别写在不同文件中,各模块只需导出公共接口部分,然后通过模块的导入的方式可以在其他地方使用
7.set数据结构
Set数据结构,类似数组。所有的数据都是唯一的,没有重复的值。它本身是一个构造函数
8.… 展开运算符
可以将数组或对象里面的值展开;还可以将多个值收集为一个变量
9.class 类的继承
ES6中不再像ES5一样使用原型链实现继承,而是引入Class这个概念
JS中的String常见方法有哪些?
1、length属性
2、小写转换toLowerCase()
3、大写转换toUpperCase()
4、字符串替换replace()
5、字符串匹配match()
6、字符串拼接concat()
7、字符串分割split()
8、字符串检索indexOf()
null和undefined有什么区别?
null
表示没有对象,即该处不应该有值
1、 作为函数的参数,表示该函数的参数不是对象
2、 作为对象原型链的终点
undefined
表示缺少值,即此处应该有值,但没有定义
1、定义了形参,没有传实参,显示undefined
2、对象属性名不存在时,显示undefined
3、函数没有写返回值,即没有写return,拿到的是undefined
4、写了return,但没有赋值,拿到的是undefined
null和undefined转换成number数据类型
null
默认转成 0
undefined
默认转成 NaN
JavaScript 严格模式(use strict)
- 消除 JavaScript 语法中一些不合理、不严谨的地方;
- 消除代码中一些不安全的地方,保证代码的安全运行;
- 提高 JavaScript 程序的运行效率;
- 为以后新版本的 JavaScript 做好铺垫。