一·JS基本概念

1.JavaScript历史

  要了解JavaScript,我们首先要回顾一下JavaScript的诞生。在上个世纪的1995年,当时的网景公司正凭借其Navigator浏览器成为Web时代开启时最著名的第一代互联网公司。由于网景公司希望能在静态HTML页面上添加一些动态效果,于是叫Brendan Eich这哥们在两周之内设计出了JavaScript语言。你没看错,这哥们只用了10天时间。为什么起名叫JavaScript?原因是当时Java语言非常红火,所以网景公司希望借Java的名气来推广,但事实上JavaScript除了语法上有点像Java,其他部分基本上没啥关系。

2.ECMAScript

  因为网景开发了JavaScript,一年后微软又模仿JavaScript开发了JScript,为了让JavaScript成为全球标准,几个公司联合ECMA(European Computer Manufacturers Association)组织定制了JavaScript语言的标准,被称为ECMAScript标准。所以简单说来就是,ECMAScript是一种语言标准,而JavaScript是网景公司对ECMAScript标准的一种实现。那为什么不直接把JavaScript定为标准呢?因为JavaScript是网景的注册商标。不过大多数时候,我们还是用JavaScript这个词。如果你遇到ECMAScript这个词,简单把它替换为JavaScript就行了。

3.JavaScript版本

  JavaScript语言是在10天时间内设计出来的,虽然语言的设计者水平非常NB,但谁也架不住“时间紧,任务重”,所以,JavaScript有很多设计缺陷,我们后面会慢慢讲到。此外,由于JavaScript的标准——ECMAScript在不断发展,最新版ECMAScript 6标准(简称ES6)已经在2015年6月正式发布了,所以,讲到JavaScript的版本,实际上就是说它实现了ECMAScript标准的哪个版本。由于浏览器在发布时就确定了JavaScript的版本,加上很多用户还在使用IE6这种古老的浏览器,这就导致你在写JavaScript的时候,要照顾一下老用户,不能一上来就用最新的ES6标准写,否则,老用户的浏览器是无法运行新版本的JavaScript代码的。不过,JavaScript的核心语法并没有多大变化。我们的教程会先讲JavaScript最核心的用法,然后,针对ES6讲解新增特性。

4.JavaScript基本语法

(1)语法:

  JavaScript的语法和Java语言类似,每个语句以;结束,语句块用{...}。但是,JavaScript并不强制要求在每个语句的结尾加;,浏览器中负责执行JavaScript代码的引擎会自动在每个语句的结尾补上;。
  注意:让JavaScript引擎自动加分号在某些情况下会改变程序的语义,导致运行结果与期望不一致。在本教程中,我们不会省略;,所有语句都会添加;
  例如,下面的一行代码就是一个完整的赋值语句:

var x = 1;

下面的一行代码是一个字符串,但仍然可以视为一个完整的

'Hello, world';

下面一行代码代码包含两个语句,每个语句用;表示语句:

var x = 1; var y = 2; // 不建议一行写多个语句!

语句块是一组语句的集合,例如下面的代码先做了一个判断,如果判断成立,将执行{...}中的所有语句:

if (2 > 1) {
    x = 1;
    y = 2;
    z = 3;
}

注意花括号{...}内的语句具有缩进,通常是4个空格。缩进不是JavaScript语法要求必须的,但缩进有助于我们理解代码的层次,所以编写代码时要遵守缩进规则。很多文本编辑器具有“自动缩进”的功能,可以帮助整理代码。
{...}还可以嵌套,形成层级结构:

if (2 > 1) {
    x = 1;
    y = 2;
    z = 3;
    if (x < y) {
        z = 4;
    }
    if (x > y) {
        z = 5;
    }
}

  JavaScript本身对嵌套的层级没有限制,但是过多的嵌套无疑会大大增加看懂代码的难度。遇到这种情况,需要把部分代码抽出来,作为函数来调用,这样可以减少代码的复杂度。

(2)注释:

  以//开头直到行末的字符被视为行注释,注释是给开发人员看到,JavaScript引擎会自动忽略:

  // 这是一行注释
alert('hello'); // 这也是注释

另一种块注释是用/*...*/把多行字符包裹起来,把一大“块”视为一个注释:

/* 从这里开始是块注释
仍然是注释
仍然是注释
注释结束 */

5.Javascript标识符和命名规约

(1)标识符

所谓标识符是指变量、函数、属性的名字,或者函数的参数。
标识符的书写有几个特征:
1. .区分大小写。
2. 第一个字符必须是字母、下划线_、或者是$
3. 后面的可以是字母、数字、下划线_$
4. 标识符可以使用中文,但是一般不推荐这么做。
使用是实际意义的单词。
变量使用驼峰规则,第一个单词首字母小写,后面单词首字母大写。
变量使用名词,方法函数使用动词开头,常量全部用大写字母,函数创建对象首字母大写。

(2)命名规约

  使用是实际意义的单词。变量使用驼峰规则,第一个单词首字母小写,后面单词首字母大写。变量使用名词,方法函数使用动词开头,常量全部用大写字母,函数创建对象首字母大写。如下:

var firstName;
var isSmall;
var hasClass;
var PI;
var MAX_COUNT;
function getName(){}
function Person(){}

6.弱类型

  在一些编译语言(C、Java、C#)等变量的类型是固定的,在声明变量的时候就要标识其类型,在程序执行前编译阶段变量的类型就确定了,而且不能改变,我们称之为强类型。

int a = 2;
string b = "hello";

  一些常见的解释型语言(PHP、JavaScript)等变量的类型是松散的,一个变量可以用来保存任何类型的数据,变量的类型不是由声明时决定(声明的时候只是用了var运算符),而是在程序执行阶段由其值的类型决定,随着程序运行其值类型改变,变量类型也会发生改变。

var message = 1; //message 类型就是数字
message = "hello world!"; //message 类型变为字符串

7.变量提升

  JavaScript引擎的工作方式是,先解析代码,获取所有被声明的变量,然后再一行一行地运行。这造成的结果,就是所有的变量的声明语句,都会被提升到代码的头部,这就叫做变量提升。
我们写了一个赋值语句。

var a = 2;

  实际上执行过程是解释器在未执行的时候先解析出变量声明,然后给他初始值undefined,然后才逐句执行程序。

var a;
a = 2;

8.关键字和保留字

  关键字是JavaScript引擎会用到的一些字,我们标识符不能再使用,比如定义变量的关键字var,关键字有:

breakelsenewvarcasefinallyreturnvoidcatchforswitchwhilecontinuefunctionthiswithdefaultifthrowdeleteintrydoinstanceoftypeof

  除了这些不能用作标识符的关键字,js还规定了一些不能用作标识符的保留字,这些字符没有什么意义,但是未来会用到:

abstractenumintshortboolean、export、interfacestaticbyeextendslongsupercharfinalnativesynchronizedclassfloatpackagethrowsconstgotoprivatetransientdebuggerimplementsprotectedvolatiledoublerimportpublic

实际上一些保留字在新的ECMAscript已经得到使用。

9.浏览器的渲染机制

(1)网页的组成:

网页 = Html+CSS+JavaScript
Html: 网页元素内容
CSS: 控制网页样式
JavaScript:操作网页内容,实现功能或者效果

(2)与JS有关的
  1. javascript和java没有任何关系。
  2. 是客户端脚本语言。
  3. ECMAScript, DOM, BOM, NodeJS。
  4. JS的引入方式:
    <html>
    <head>
    <meta charset="utf-8">
    <title>标题</title>
    <link href="index.css" rel="stylesheet">
    <style>
        body{
            background: red;
        }
    </style>
    </head>
    <body>
        <p>
        </p>
        <script src="index.js"></script>
        <script>
            alert(1);
        </script>
    </body>
    </html>
(3)浏览器的渲染顺序
  1. 解析 HTML 标签, 构建 DOM 树。
  2. 解析 CSS 标签, 构建 CSSOM 树。
  3. 把 DOM 和 CSSOM 组合成 渲染树 (render tree)。
  4. 在渲染树的基础上进行布局, 计算每个节点的几何结构。
  5. 把每个节点绘制到屏幕上 (painting)。
    参考:How browsers work
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值