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 做好铺垫。