前言
浏览器的组成
-
Shell 外壳部分
-
内核部
浏览器内核的组成
- 渲染引擎(渲染引擎负责网页中内容的显示)
- Js引擎(JS引擎创建一个环境,在这个环境中Js引擎可以解释、编译和执行JS代码)
浏览器内核大分类
浏览器名称 | 对应的内核 |
---|---|
谷歌浏览器 +大部分手机浏览器 | weikit/blink内核 |
火狐浏览器 | Gecko内核 |
Opera浏览器 | Presto内核 |
IE浏览器 | Trident内核 |
Safari浏览器 | webkit内核 |
JS的特点
- 弱类型语言
- 解释性
- 单线程
Js的三大组成部分
- ECMAScript 简称ES是JS的基本语法
- DOM Document Object Model 文档对象模型
- BOM Browser Object Model 浏览器对象模型
JS文件的引入方式
- 外链 为符合结构,样式,行为相分离的W3C标准,一般是外链js文件
- 内嵌
- 行内 不推荐
什么是变量
- 值是可以变化的量
- 用处:能够储存JS中不同数据类型的值以供JS程序使用
变量如何声明
var a //声明一个变量 变量名为a
一个变量声明了没有赋值结果是undefined
变量名的规则
- 变量名必须以英文字母、_、$ 开头
- 变量名可以包括英文字母、_、$、数字
- 不可以用系统的关键字、保留字作为变量名
关键字
JS语法中已经存在的单词 (如下:)
break | do | instanceof | typeof |
---|---|---|---|
case | else | new | var |
catch | finally | return | void |
continue | for | switch | while |
debugger* | function | this | with |
default | if | throw | delete |
in | try |
保留字
JS语法中现在不存在,但是以后会成为关键字的单词(替补关键词) (如下图:)
abstract | enum | int | short |
---|---|---|---|
boolean | export | interface | static |
byte | extends | long | cuper |
char | final | native | synchronized |
class | float | package | throws |
const | goto | private | transient |
debugger | implements | protected | volatile |
double | import | public |
var
关键词 可以申请变量
变量的用处??
变量是用来储存js的数据
var a = 1; =是赋值
**如果一个变量声明了没有
赋值是什么结果**
整常声明变量并赋值
var a = 2;
console.log(a);
正常的结果
如果一个变量声明了没有赋值
var a;
console.log(a);
一个变量声明了没有赋值是undefined
var a; a--->undefined
申请变量的数据类型
js的数据类型分为
- 原始值
- 引用值
原始值
- 数字类型(
number
) - 字符串类型(
string
) - 布尔类型(
boolean
) undefined
类型null
类型
1、数字类型 (number
)
例如:1,2,-1,0
2、字符串类型(string
):用一组单引号或者一组双引号包裹的数据类型
例如:'1' "1" ''(''空的字符串)
3、布尔类型 :true
(真) false
(假)
4、undefined类型(js内置的数据类型):他只有一个值undefined
未定义
5、null类型:他只有一个值null
空对象
引用值
1、普通对象 :用一组花括号包裹的数据
{} {name:"heaven"}
2、数组对象 :用一组中括号包裹的数据
[] [1,2,3]
3、函数对象:function auto (){}
typeof数据类型检测
typeof+js数据
- 可以检测出JS数据的类型
- 检测出的结果是以字符串格式的
注意:typeof是以字符串形式输出内容,而字符串里面的内容则是值得类型
typeof原始值检测结果
typeof
:数字类型(number
)typeof
:字符串类型(string
)typeof
:布尔类型(boolean
)typeof
:undefined类型(undefined
)typeof
:null类型(object
)js特例BUG理论上是null
typeof引用值检测结果
typeof
普通对象:(object
)typeof
数组对象:(object
)typeof
函数对象:(function
)
console.log
在控制台中输出结果
在控制台中:
黑色表示字符串
蓝色表示数字
问题
var a=任意数据类型;
console.log(typeof typeof a);
为什么是返回来的值是string
(字符串类型)
为什么?
typeof
第一回判断的是字符串形式的数据类型- 第二会是根据这个字符串形式作判断
结果也是字符串
最后typeof
返回来的
结果无论什么数据类型都返回来的是字符串类型的(
string
)
原始值和引用值的区别
原始值和引用值总结
原始值:储存在栈区
number
(数字)string
(字符串)boolean
(布尔)undefined
(undefined)null
(null)
引用值:储存在堆区(我们声明的变量是在栈区中引用数据的地址)
- 普通对象(
{}
) - 数组对象(
[1,2,3]
) - 函数对象(
function(){}
)
变量a
的重新赋值能否改变之前变量b
的值
var a = 2;
var b = a;
a = 333;
console.log(b);
答案是否不能
为什么???
原始值
如下图
一个变量就相当于一个门牌号都有相对应的门(房间)
如果有一个变量改变了原来的值a=b
那么变量b
不被原先变量a
改变的值所改变
引用值
var arr = [1,2,3];
var arr1 = arr;
arr1.push(4);
console.log(arr)
push
往这个数组在塞追加一项把数据放在栈区中把地址放在栈区中
引用值是在堆去中存这的但是地址是放在栈区中,我们平时声明的变量是把在栈区中的地址赋值给变量的这个地址我们是查不到的
数据的储存位置不同
- 原始值储存在栈区 举个栗子
a = 2
数字2
就储存在栈区 - 引用值储存在堆区 举个栗子
b = [1,3]
数组[1,3]
就储存在堆区
数据在操作时不同
- 原始值操作的是值
- 引用值操作的是值的地址