1.浏览器组成:
(1)shell部分:用户能操作的部分
(2)内核部分:咱们能看到的,能够处理代码,并且能把代码显示出来的,
①:渲染引擎(语法规则和渲染):从上自下。主要负责html和css一些基础语法的识别,以及这个浏览器怎么去绘制这个页面。
②:js引擎:负责javascript。
③:其它模块:负责异步或者其它东西
2.js的逼格:特点、特色:我有你没有。
(1). 解释性语言。(javascript java)
解释性语言:看一行翻译一行,不生成特定的文件,翻译完一行之后,引擎就会去执行一行(比如看到第二行的时候,就会翻译第二行,引擎就去触发第二行)
优点:跨平台
不足:稍微慢
补充:编译性语言(c、c++):通篇翻译,(比如你写了10行代码,它是看完第一行,第二行,第三行..第十行,)全看完之后,通篇翻译完之后,生成看一个翻译完的文件,并且程序会最终执行这个翻译完的文件。(比如java编辑的时候是.java文件,它翻译完后,会变成一个一个.class文件,系统就会执行这个.class文件。)
优点:快
不足:移植性不好(不跨平台)
(2)单线程:一个人同一时间只能干一件事。
3.js的三大部分:ECMAScriot、DOM、BOM
4.几大主流浏览器及其内核:
IE:trident; Chrome:webkit/blink;firefox:Gecko; Opera:Presto;Safari:webkit;

5.知道了引入js的两种方式。其一:在页面引入js。其二:引入外部js文件。格式:

6.web标准:结构(html) 行为(js) 样式(css) 相分离。 三个文件分开写:看起来清晰,好维护。

7.js的基本语法:创建变量的关键字:var。声明一个名字为a的变量: var a;
(1).命名规则:必须以英文字母、下划线、&开头;变量名可以包括英文字母、下划线、&、数字;不可以用系统的关键字、保留字作为变量名。
标准写法:单一声明时,每个变量后面跟着逗号的同时要换行
(2). 值类型---数据类型:
1):原始值:Number Boolean String undefined null。
①String:用一对单引号或者双引号,里面的内容就是字符串。:字符串abc。
②Boolean:只有true和false两个值
③Null:表示占值,当需要覆盖某些元素时,可用null:突然有一天之前的变量不用了,想删了,那是不可能的,所以用null,就null赋给这个变量
2):引用值:array object function date RegExp…

8.栈和堆(原始值和引用值赋值的方式不一样):
原始值和引用值赋值的方式不一样:原始值存在栈(stack)里面,引用值大致存在堆(heap)里面。
(1)原始值和栈:
原始值:var a = 10,a是原始值,因为由值决定类型。
栈:先放到栈底,栈内存和栈内存之间的赋值是拷贝的关系,把一个栈里面的东西放到另一个栈里面,所以它们之间是互相不影响的。例: var a=10;var b=a;:a先取出来它的值,拷贝一份,然后放到b里面去,b的值就变为10了,a的10和b的10是不一样的,后面再改变a或者b的值时,另外一个值是不变的,但是a或者b会改成原来的数字如(改为1011)。

(2)引用值和堆
堆:名字放到栈,值在堆,栈里面放的是堆和地址,引用值拷贝过去的是地址,改变其中一个的值时,另一个也跟着改变。var arr=[1,2];var arr1=arr;arr.push(3)在原来的数组里加了一个3在栈再放一个名字arr1,然后栈的arr 和arr1同时指向堆的值的位置。var arr=[1,2];var arr1=arr;arr=[1,3],栈里arr位置里放的内容改变,堆在新的位置存入值。

var arr = [1,2];var arr1 = arr;:
var arr = [1,2]:先申请一个房间(arr),这个房间(arr)在栈那(栈:先放到栈底)然后系统看到[1,2]这是引用值,就把引用值[1,2]放到堆(heap)里面,然后名(arr)和引用值的联系:把栈内存里面放上堆地址(heap1001),然后这俩就连成了一条线。var arr1 = arr:然后看到了arr1,先在栈那申请一个房间arr1,然后一看里面放值是arr,又是一个引用值,然后就把arr的内容拷到arr1身上(即把arr的地址拷贝过去)。

var arr=[1,2];var arr1=arr;arr.push(3)在原来的数组里加了一个3,在栈再放一个名字arr1,然后栈的arr 和arr1同时指向堆的值的位置(值堆里面放的引用值)。

var arr=[1,2];var arr1=arr;arr=[1,3],栈里arr位置里放的内容改变,堆在新的位置存入值。

var arr=[1,2];var arr1=arr;:这俩和之前的顺序一样,然后arr = [1,3],即arr等于了一个新的房间,它就会在堆那重新申请一个房间放引用值[1,3],然后让arr指向一个新的房间。

真正的内部原理:
原始值有个特点:不可改变的原始值:一个房间里面以及放进去值了,你就别想再往里面改东西,想改变之前的原始值(num = 200):在另一个房间里面写上值(200),把第一个房间的编号(num),放到新建的另一个房间的编号上(即第二个房间的编号变为了num),然后之前的房间编号回归成1011,变成野房间:num首先是100,然后变成了200

9.语法错误:分为两种:低级错误(语法解析错误),逻辑错误(标准错误,情有可源)
解释性语言,看一行执行一行,在次之前,会大体扫一眼(不执行也不编译)有没有存在错误,如果有就会扫出来,就会报错。

10.js运算符
(1)“+”的两个作用:数***算、字符串链接。
(2) 任何数据类型加字符串都等于字符串(a=”a”+1+1),输出结果是:a11;字符串加字符串等于两个字符串连接。
(3) NaN: (Not A Number) 应该得出数字类型的值,没办法表示这个值时,都会换成NaN。如0/0:结果是NaN
(4)Infinity: 这个值是无穷的。如1/0,结果是:Infinity -1/0结果是:-Infinity
(5)优先级:=:优先级最弱;():优先级最高。

注意: 1.数字的类型是浮点型,而不是整型。类型由值的类型定。
2.不需要加分号的情况: 函数、for循环、if() {},后面不需要加分号。
3.书写格式的规范:“= + / -”两边都应该有空格。
4.一个代码块的错误不会影响另一个代码块的运行
5.赋值顺序:从右到左
6.计算顺序:从左到右(特殊优先级特殊处理)