False Begginer - 1. JavaScript初始

149 阅读6分钟

1.JavaScript发展史、ECMA、编程语言、JS值

1.JavaScript的发展史

  • 五大主流的浏览器 内核

    IE -- trident

    chrome -- webkit blink

    safari -- webkit

    firefox -- gecko

    opera -- presto

  • 浏览器的发展历史和JS的诞生

1990:蒂姆 伯纳斯 李(发明超文本分享资讯(world wide web)的人), 然后将超文本资讯移植到C语言下,命名为libwww/nexus,允许别人浏览他人编写的网站。

1993:美国伊利诺大学NSCA组织里面的(马克 安德森)发明MOSIAC浏览器, MOSIAC浏览器能够显示图片,是第一个图片化的浏览器

1994:马克 安德森和硅图SGI公司的吉姆 克拉克合作创建MOSIAC communication corporation公司,因为MOSIAC浏览器的商标权属于伊利诺大学,伊利诺大学将商标转让给spy glass公司。于是迫不得已将公司改名为Netscape communication corporation(网景公司)
网景公司创造出-->netscape navigator(第一个传统意义的浏览器)。

1996:微软公司收购spy glass公司,创造出IE(internet exploror) 1.0。

发布IE3,出现脚本语言Jscript(动态交互网页)

网景公司的Brendan eich在Netscape navigator的基础下,发明了livescript

随着Java的名声越来越大,网景的livescript却不温不火。于是网景公司与SUN公司商量,合作推广和宣传产品,livescript也改名为Javascript

2001:IE6 XP诞生,出现JS引擎

2003:mozilla公司发明出firefox,firefox第一个版本是在网景公司的netscape navigator的基础下研发的。

2008:Google公司基于WEBKIT BLINK GEARS(离线上网)为内核发明出chrome浏览器。

chorme浏览器拥有V8引擎,V8引擎是针对于JS创造的独有引擎,可以直接翻译机器码独立于浏览器运行。

NodeJs也是基于V8引擎能够独立运行的Javascript环境。

V8引擎优点在于:

  1. 直接翻译机器码
  2. 独立于浏览器运行(速度非常快)

Google公司提出PROGRESSIVE WEB APP(渐进式WEB APP),是一种理念,或者叫做打包产品,因为它是把众多能让WEB产品APP化的能力的一个集合。

Progressive Web App优点在于:

  • 类APP交互
  • 消息推送
  • 离线缓存

2009:甲骨文oracle公司收购了SUN公司,JS的所有权给了甲骨文公司

2.ECMA(European Computer Manufactures Association 欧洲计算机制造联合会)

  • ECMA - 262 规范化脚本语言 脚本语言规范 ECMAScript
为了让最初的JavaScript与最初的JScript能遵循同一套标准发展而诞生的ECMAScript

** 编程语言:**

1. 解释型语言:源码-->解释器-->解释一行就执行一行

优点:

不需要根据不同的系统平台进行移植

编译型语言:源码-->编译器-->机器语言-->可执行文件

2. 脚本语言:

->脚本引擎->解释器

脚本语言 前端和后端都有

javascript 客户端脚本,JS解释器在JS引擎上 php服务端脚本

脚本语言有:

JavaScript、jscript 微软 只支持IE、vbscript 微软、actionscript adobe flash player 视频脚本、asp asp.net框架 (逐渐淘汰)

3.JavaScript

3.1 JavaScript三大块:

ECMAscript:语法, 变量,关键字,保留字,值,原始类型,引用类型运算,对象,继承,函数

DOM: document object model W3C规范

BOM:browser object model 浏览器对象模型 无规范

3.2 JS的引擎是单线程:

问题:JS的引擎是单线程,为什么可以多个程序一起运行呢?
解答:单线程-->模拟多线程(利用轮转时间片)
     轮转时间片:短时间之内轮流执行多个任务的片段
实现步骤:
    1.任务1	任务2
    2.切分任务1	任务2
    3.随机排列这些任务片段,组成队列
    4.按照这个队列顺序将任务片段送进JS线程
    5.JS线程执行一个又一个的任务片段

3.3 javascript代码块的引用:

外部JS的引用 :

<script type="text/javascript" src="index.js"></script>

内部JS的引用 :

<script type="text/javascript"></script>

外部引用里面不能写内部JS引用,内部不会被执行

3.4 自定义script的type属性应用

    <script type="text/tpl" id="tpl"></script>
type="text/tpl"导致script不会执行。所以这样将script当作模板,之后要替换script里面的内容。

3.5 JavaScript和HTML/CSS的区别

有变量,函数,数据结构,运算的才算是编程语言像JavaScript,而HTML和Css是标记语言

4.JavaScript变量

4.1 变量是什么?

变量其实是容器,JavaScript中的变量声明是var(variable);

问题:为什么JavaScript中的变量声明是var呢?为什么不能是其他的呢?
解释:因为JavaScript是解释性语言,也是一门弱类型语言,因为在变量的声明时不像Java那种强类型语言一样,对变量进行严格的数据类型声明,所以var也对应着variable(变量)的意思

4.2 变量声明

变量由两个部分组成,分别是变量声明变量赋值

var a; // 变量声明
a = 3; // 变量赋值
var b = 4; // 变量声明并且赋值
var x,
      y; // 一定要分号结尾,如果不加分号也不会报错。

4.3 变量命名规则

变量命名规则:

1.不能以数字开头

2.能字母_$开头

3.可以包含字母_$数字

4.关键字,保留字

5.语义化 结构化

6.小驼峰

7.可以用中文声明变量,但是极其不推荐;

var 1  = 3; // Uncaught SytanxError:Unexpected number
var class = 3; // Uncaught SytanxError:Unexpected token 'class'
var 中国 = 'china'; 
console.log(中国); // china

4.4 重复赋值问题

var a = 1;
  	a  = 2; // 同名的话后面的值覆盖前面的值

4.5 需要有优先级的概念

var x = 3,
    y = 4;
var z = x + y; // 运算的优先级 > 赋值的优先级

5.JavaScript值(重要)

5.1 弱类型语言和强类型语言

编译型语言-->源码-编译器-机器语言-可执行文件 (跨平台性不好 编译快)

解释型语言-->源码-解释器-解释一行执行一行 (不需要根据不同系统平台移植)

动态语言-->脚本语言-->解释性语言-->弱类型语言

静态语言-->编译型语言-->强类型语言

5.2 原始值(基本类型)和引用值

原始值:(基本类型)

Number(数字类型) String(字符串类型) Boolean(布尔值类型) undefined null

undefined 未被定义的值

null 空值

引用值:

object array function(函数) date(日期) RegExp(正则)

5.3 栈内存(stack)和堆内存(Heap)

对于基本数据类型赋值,在栈和堆的操作过程
var a = 1;
var b = a; // 在栈内存中,通过对a拷贝一份a的值,赋值给变量b
		a = 3; // 对a重新赋值,在栈内存中s1007虽然清除a变量但是仍然保留原来a的值1,表示基本类型数据在栈内存中永久保存
对于引用数据类型赋值,在栈和堆的操作过程
var arr1 = [1,2,3];
var arr2 = arr1; // 在引用类型赋值的过程中,其实赋值的是堆内存的引用地址
arr1.push(4); // 此时数组增加元素4,arr1和arr2同时都会变化,因为引用地址相同
arr1 = [1,2]; // 对arr2 重新赋值,改变arr2的引用地址,此时arr1和arr2的引用地址就不同了