第一章 JavaSript概论
1.什么是JavaScript.
具有面向对象能力的,解释型的程序设计语言。
2.JavaScript的特点.
- 松散性
- 对象属性
- 继承机制(基于原型)
3.JavaScript核心
- 核心(ECMAScript)
- 文档对象模型(DOM)
- 浏览器对象模型(BOM)
第二章 使用JavaScript
1.创建一张HTML页面
<!DOCTYPE HTML>
<html lang="en">
<head>
<meta charset="utf-8"/>
<title>The first page</title>
</head>
<body>
<h1>Hello World</h1>
</body>
</html>
2.<script>标签解析
- defer ----规定是否对脚本执行进行延迟,直到页面加载为止。
- src ----规定外部脚本文件的 URL。
- type ----规定脚本的 MIME 类型。
- charset ----定义脚本中使用的字符编码。不支持。
3.JS代码嵌入的一些问题
平稳退化,不支持javascript
<noscript>
您没有启用javascript.
</noscript>
第三章 语法,关键字保留字及变量
1.语法构成
- 区分大小写
- 标识符:变量,函数,属性的名字,或者函数的参数
- 注释 //单行 /* */多行
- 直接量(字面量)
- 数组字面量和对象字面量的表达式也是支持的{x:1,y:2},{1,2,3,4,5}
2.关键字和保留字
- 2.1 关键字
break | else | new | var |
case | finally | return | void |
catch | for | switch | while |
continue | function | this | with |
default | if | throw | delete |
in | try | do | instanceof |
typeof | | | |
- 2.2 保留字
abstract | enum | int | short |
boolean | export | interface | static |
byte | extends | long | super |
char | final | native | synchronized |
class | float | package | throws |
const | goto | private | transient |
debugger | implements | protected | volatile |
double | import | public |
3.变量
- 定义变量时要使用var操作符,后跟变量名,如下所示:
var message
- 该变量可以用来保存任何值,像例子所示未经过初始化的变量,会保存一个特殊的值:undefined.
- 有一点必须注意,即使用var操作符定义的变量将成为该变量的作用域中的局部变量。如果省略了var操作符,而表示创建的是一个全局变量。
- 可以用一条语句定义多个变量,只要像下面这样把每个变量(初始化或者不初始化)用逗号隔开即可。
var message="hi",found=false,age=29;
第四章 数据类型
简单数据类型:Undefined,Null,Boolean,Number和String
复杂数据类型:Object ,Object本质上是由一种无序的名值对组成的。JavaScript不支持任何创建自定义类型的机制,而所有的值最终将是上述6种数据类型之一。
1.typeof操作符
- 对象或null ---- object
- 函数 ------ function(不是数据类型)
- 未定义 ------ undefined
- 数值,NaN ----- number
- 字符串 ----- string
- 函数 ----- function
2.Undefined类型
- 只有一个值,即特殊的undefined
- 使用var声明变量,但没有对其进行初始化
- 没有必要给一个变量赋值为undefined
var message;
console.log(message) //undefinrd
3.Null类型
- 只有一个值,即特殊的null
- 它代表一个空的对象引用(指针)
- 如果定义变量准备在将来用于保存对象,最好初始化
- undefined是派生自null
var car=null;
console.log(typeof car); //object
console.log(null==undefined); //true
4.Boolean类型
以下情况的boolean值为false
- 空字符串
- 0和NaN
- null
- undefined
var found=true;
var lost=false;
console.log(typeof found); //boolean
console.log(typeof lost); //boolean
var message="Hello world!";
var messageAsBoolean=Boolean(message);
console.log(messageAsBoolean); //true
- 不同数据类型之间可以转换
数据类型 | 转换为true的值 | 转换为false的值 |
Boolean | true | false |
String | 任何非空字符串 | ""(空字符串) |
Number | 任何非零数字值(包含无穷大) | 0和NaN |
Object | 任何对象 | null |
Undefined | 不适用 | undefined |
- 这些转换规则对理解流控制语句(如if语句)自动执行相应的Boolean转换非常重要:
var message="Hello world";
if(message){
console.log("value is true");
}
5.Number类型
- 关于NaN,它即非数值(Not a Number),是一个特殊的数值。这个数值用于表示一个本来要返回数值的操作数未返回数值的情况(这样就不会抛出错误了)。例如,在其他编程语言中,任何数值除以0都会导致错误,从而停止代码执行。但在javascript中,任何数值除以0会返回NaN,因此不会影响其他代码的执行。
- NaN本身有两个非同寻常的特点。首先,任何涉及NaN的操作(例如NaN/10)都会返回NaN。其次,NaN与任何值都不相等,包括NaN本身。
Number.MIN_VALUE~~~Number.MAX_VALUE //浮点数范围
console.log(NaN==NAN); //false
console.log(isNaN(NaN)); //true
console.log(isNaN(10)); //false
console.log(isNaN("10")); //false,可以被转换成10
console.log(isNaN(true)); //false,可以转换成1
console.log(isNaN("blue")); //true
6.String类型
- String类型用于表示由0个或多个Unicode字符组成的字符序列,即字符串。字符串可以由双引号或单引号表示;
- 字符串是不可改变的,一旦创建,它们的值就不能改变,要改变某个变量保存的字符串,首先要销毁原来的字符串,然后再用另一个包含新值得字符串填充该变量。
- 将一个值转化成字符串有两种方式。一种是每个值都有的toString()方法,这个方法唯一要做的就是返回相应的字符串表现。
var age=11;
var ageAsString=age.toString();
console.log(ageAsSring); //字符串 “11”
var found=true;
var foundAsString=found.toString();
console.log(foundAsString); //字符串“true”
7.Object类型
- javascript中的对象其实就是一组数据和功能的集合,对象可以通过new操作符后跟要创建的对象类型的名称来创建。而创建Object类型的实例并为其添加属性和方法,就可以创建自定义对象。
var o=new Object();
o.name="jack";
o.age=12;
o.box=function(){
return "hhh"
}
console.log(o.name); //"jack"
console.log(o.box()); //"hhh"
- 同样可以使用new操作符来创建其他类型的值
var box1=new Number(9);
console.log(box1); //9;
var box2=new Boolean(true);
console.log(box2); //true
var box3=new String("kang");
console.log(box3);
第五章 运算符
1.什么是表达式
- 最简单的表达式是字面量或者变量名
2.一元运算符
- 递增++和递减--
- 前置和后置的区别
var box=100;
var age=++box; //age的值为101;
var height=box--; //height值为100;
- 其他类型应用一元运算符的规则
var box="89";box++; //90
var box="ab";box++; //NaN
var box="false";box++; //1;
var box={
toString:function(){
return 1;
}
};box++; // 1
- 加和减运算符
var box=100; +box; //100
var box="89"; +box; //100
var box=false; +box; //0
3.算术运算符
ECMAScript 定义了 5 个算术运算符,加减乘除求模(取余)。如果在算术运算的值不是
数值,那么后台会先使用 Number()转型函数将其转换为数值(隐式转换)。
- 加法
- 减法
- 乘法
- 除法
- 取余
4.关系运算符
用于进行比较的运算符称作为关系运算符:小于(<)、大于(>)、小于等于(<=)、大于等
于(>=)、相等(==)、不等(!=)、全等(恒等)(===)、不全等(不恒等)(!==)
- 和其他运算符一样,当关系运算符操作非数值时要遵循一下规则:
- 两个操作数都是数值,则数值比较;
- 两个操作数都是字符串,则比较两个字符串对应的字符编码值;
- 两个操作数有一个是数值,则将另一个转换为数值,再进行数值比较;
- 两个操作数有一个是对象,则先调用 valueOf()方法或 toString()方法,再用结果比较;
var box = 3 > 2; //true
var box = 3 > 22; //false
var box = '3' > 22; //false
var box = '3' > '22'; //true
var box = 'a' > 'b'; //false a=97,b=98
var box = 'a' > 'B'; //true B=66
var box = 1 > 对象; //false,如果有 toString()或 valueOf()
则返回 1 > 返回数的值
- 在相等和不等的比较上,如果操作数是非数值,则遵循一下规则:
- 一个操作数是布尔值,则比较之前将其转换为数值,false 转成 0,true 转成 1;
- 一个操作数是字符串,则比较之前将其转成为数值再比较;
- 一个操作数是对象,则先调用 valueOf()或 toString()方法后再和返回值比较;
- 不需要任何转换的情况下,null 和 undefined 是相等的;
- 一个操作数是 NaN,则==返回 false,!=返回 true;并且 NaN 和自身不等;
- 两个操作数都是对象,则比较他们是否是同一个对象,如果都指向同一个对象,则返
回 true,否则返回 false。 - 在全等和全不等的判断上,比如值和类型都相等,才返回 true,否则返回 false。
var box = 2 == 2; //true
var box = '2' == 2; //true,'2'会转成成数值 2
var box = false == 0; //true,false 转成数值就是 0
var box = 'a' == 'A'; //false,转换后的编码不一样
var box = 2 == {}; //false,执行 toString()或 valueOf()会改变
var box = 2 == NaN; //false,只要有 NaN,都是 false
var box = {} == {}; //false,比较的是他们的地址,每个新创建对象的引用地址都不同
var age = {};
var height = age;
var box = age == height; //true,引用地址一样,所以相等
var box = '2' === 2 //false,值和类型都必须相等
var box = 2 !== 2 //false,值和类型都相等了
5.逻辑运算符