浏览器

mosaic(马赛克)
	第一个获得普遍使用和能够显示图片的网页浏览器
	后来被Microsoft收购,在mosaic的基础上开发出Internet Explore
	
Netscape Navigator(网景)
	也是基于mosaic的基础上开发的,后来改名Mozilla Firefox(火狐)
	
浏览器分为shell和内核部分
shell

JavaScript音译 翻译javascript_赋值

内核
	渲染引擎
	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);

	基本数据类型在进行值传递时,传递的是值
	引用数据类型在进行值传递时,传递的是引用地址