浏览器
mosaic(马赛克)
第一个获得普遍使用和能够显示图片的网页浏览器
后来被Microsoft收购,在mosaic的基础上开发出Internet Explore
Netscape Navigator(网景)
也是基于mosaic的基础上开发的,后来改名Mozilla Firefox(火狐)
浏览器分为shell和内核部分
shell
内核
渲染引擎
js引擎
其它模块
JavaScript
起初目的是为了改善用户体验,后来Sun公司被Oracle收购,JavaScript版权归Oracle所有
特点:
1.解释性语言
编译
通篇翻译后,生成翻译完的文件, 程序执行翻译后的文件
c c++
c .obj
优点:快
不足:移植性不好(不跨平台)
java oak语言
.java——javac——>编译——>.class ——>jvm——>解释执行
解释
看一行翻译一行,不生成特定文件
JavaScript、php
翻译一行执行一行
优点:可跨平台
不足:稍微慢
2.单线程:同一时间只能做一件事——js 引擎是单线程
(同一时间做很多事叫多线程)
3.ECMA标注
语言标准
js大部分
ecmascript
DOM
BOM
主流浏览器
IE trident
Chrome webkit
Firefox Gecko
opera presto
Safari webkit
JavaScript
一、什么是JavaScript
• 1、由来
起初目的:
本地表单验证
为了改善用户体验
• 2、组成:
核心js:ecmascript5(linux)
DOM:文档对象模型
BOM:浏览器对象模型
兼容性:
核心js兼容性最好
dom和bom兼容性相对较差
• 3、特点
○ a、弱类型语言
§ Java:强类型语言
□ int a = 10;
□ a = "hello";
§ JavaScript:弱类型语言
□ var a = 10;
□ a = "hello";
□ console.log(a);
○ b、脚本语言
§ 本身具有逻辑能力和行为能力
○ c、解释性语言
§ 需要被js解析器解析执行
§ 浏览器:
□ 内置js解析器
§ node:
□ js运行环境
□ 封装了js解析器(Google v8)
□ node --version:检测node版本号
□ 1、repl环境
® r:read
® e:excute
® p:print
® l:loop
□ 2、node命令
® node a.js
® cd
® ls
® node test.js
® /opt
® /opt/bin
® node
○ e、从上到下依次执行
§ 代码顺序:
□ say();
□ function say(){}
§ 解析顺序:
□ function say(){}
□ say();
§ 执行:
□ function say(){}
□ say();
§ 优先解析函数声明,然后解析使用var操作符声明的变量
○ f、大小写敏感
§ var a = 10;
§ console.log(A);
§ Console.log(); //报错
• 4、变量声明
○ a、变量的声明
§ 1)标识符的声明
□ 1.由字母、数字、下划线以及$组成
var 桌子='';
var + =''
□ 2.不能以数字开头
var 2a=''//error
var a2=''//success
□ 3.建议大家使用驼峰式命名
var firstnameandlastname='zhangsan';
从第二个单词开始,首字母大写
var firstNameAndLastName=''
□ 4.不能使用关键字和保留字
关键字:在js中具有特殊意义的字符
保留字:未来有可能成为关键字的字符
console.log()
var console=
var var=''
var mytable1
§ 2)变量的声明
□ es5:
var a;//声明一个a变量,但不赋值
a="hello";//获取a变量并赋值hello
var b="hello";//变量的声明并赋值
c='hello';//变量的声明并赋值
var a=2,b=3,c=4;//同时声明多个变量
□ es6:
let:
使用let声明的变量,只能声明一次(不能重复声明)
不能进行变量提升
局部变量
const:
一般用来声明常量,一旦声明,不可修改
使用const声明的常量,只能声明一次(不能重复声明)
局部变量
如果常量值为引用数据类型,只要引用地址不变,可以修改内部属性
color='rgb'
const person={//引用地址1001
name:'tom'
age
gender
....
}
test.js:
var a=10;
function say(){
console.log(a);
var b=20;
console.log(b);
}
console.log(b);
○ b、注释
§ //:单行注释
§ /**/:多行注释
○ c、语句
§ 建议每一行语句结束,使用分号结尾
var a = 10;
console.log(a);
• 5、使用
○ i、浏览器中使用
§ a、嵌入在HTML标签内部
□ script脚本
§ b、外部引入脚本
□ 1)script标签:src属性
□ 2)创建一个js文件,以.js为文件后缀名
□ 全局
window.
// 打印的是window.name
console.log(name);
// console.log(window.name);
window.onload = function(){
//当dom树加载完毕之后在执行当前函数
console.log(document.getElementsByTagName('h1'));
}
○ ii、在node中使用
§ c、node
□ 1)创建一个js文件,以.js为文件后缀名
□ 2)执行node test.js
□ 全局
global
• 6、局部变量和全局变量
a、什么是全局和局部?
全局变量:能够在任何作用域下使用的变量
局部变量:只能在某一作用域下使用的变量
b、如何声明?
§ 局部变量:
let
const
使用了var操作符并声明在函数内部
• 7、数据类型
○ 共有6种数据类型
typeof (a)
typeof a:
返回值:
undefined
object(null+object)
number
boolean
返回值类型:
string
○ 其中5种基本数据类型(简单数据类型)
undefined:未定义
var a;//声明一个变量而不赋值时
var a=undefined;//直接赋值undefined
既不声明也不赋值的变量,数据类型为undefined
null:
空引用数据类型
即将指向堆区,但是此时没有指向
var a=null;
******undefined派生自null
null==undefined:true
null===undefiend:false
Number:
数值类型
10
10.3
011
0xa
NaN:not a number
infinity:无穷
10/0
isNaN(a):
a是不是 不是一个数
当a不是一个数时,返回true:
是的,他不是一个数
当a是一个数时,返回false:
不是,他是一个数
isFinite(a):
a是否为无穷数
false:a是一个无穷数
true:a不是一个无穷数
boolean:
true
false
var a=true;
var b=false;
string:
字符串类型
使用单引号或者双引号包裹的字符
'' "" ``
"undefiend"
"false"
'null'
'0'
json:
{
"name":"lisi",
"age":10
}
[{
"nmae":
"age":
},{},{}]
○ 1种引用数据类型(复杂数据类型)
object
function:
array:
var arr=new Array();
arr.valueOf();
date
...
共有的属性和方法:
constructor:构造者
toString():将当前变量转换为字符串类型
function say(){}->function(){}
[1,2,3,4]-》[1,2,3,4]
.....
valueOf():返回变量的原始值
typeof 能返回的六种数据类型(区分数字类型)
number、string、boolean、undefined、object、function
typeof(a);
typeof a:
返回值:
undefined
number
NaN:not a number
返回值类型:
string
• 8、值传递问题
○ 基本数据类型:
var a=10;
b=a;
b=b+1;
console.log(a);
console.log(b);
○ 引用数据类型:
var obj={
name:'lisi',
age:20,
gender:'men'
}
○ 问题:
var obj1={
name:'lisi',
age:20
}
obj2=obj1;
obj2.name='terry';
console.log(obj1.name);
console.log(obj2.name);
基本数据类型在进行值传递时,传递的是值
引用数据类型在进行值传递时,传递的是引用地址