JavaScript Distilled 基础知识与函数
作者:
JavaScript是一种动态的,弱类型的,基于原型的,面向对象的解释型语言。函数是JavaScript中的头等公民。
一、运算符
. [] () 属性存取及函数调用
delete new typeof + - ! 一元运算符
* / % 乘法,除法,取模
+ - 加法/连接,减法
>= <= > < 不等式运算符
=== !== 等式运算符
&& 逻辑与
|| 逻辑或
?: 三元运算符
二、语句:
1.if语句
var dayOfWeek=0;
if(day===6){
}
else if(dayOfWeek===0){
}
else{
}
2.switch语句
var dayOfWeek=0;
switch (dayOfWeek){
case 6:
break;
case 0:
break;
default:
break;
}
switch语句将switch表达式的值和所有指定的Case表达式进行精确匹配(===)。当找到一个匹配时,执行匹配的case从句中的语句。如果没有找到任何匹配,则执行可选的default语句。
3.while语句
var count=0;
while (count<=10){
count++;
}
4.do/while语句
var count=0;
do{
count++;
}while (count<=10);
5.for语句
for (var count=0;count<=10;count++){
}
6.for/in语句
var colors=["Red","Yellow","Blue"];
for (var color in colors){
}
7.try/catch语句
try{
}
catch(e){
}
8.throw语句
throw{
name:'ArgumentOutOfRangeError',
message:'year must > 0'
}
9.return语句
return "Red";
return语句会使一个函数提前返回。它也可以指定要被返回的值。如果没有指定返回表达式,那么其值是undefined。
三、类型:
1.数字
var value=1.0;
JavaScript只有一个单一的数字类型。他在内部被表示为64位的浮点数。
特殊数值:
NaN 非数字的特殊值
Infinity 无穷大的特殊值
2.字符串
var value="One";
JavaScript字符串是一个由16位的Unicode字符组成的序列。字符串字面量可以被包围在单引号或双引号中。
字符串转义:
\" \' \\
\b 退格符
\f 换页符
\n 换行符
\r 回车符
\t 制表符
\uXXXX 由4位16进制XXXX指定的Unicode字符
3.布尔值
var value=true;
布尔值只有2个值:true和false。
下列值被当作假值:
false
null
undefined
空字符串''
数字0
数字NaN
4.null
var value=null; //null
JavaScript中null是一个特殊的值,表示“无值”。
5.undefined
var value; //undefined
JavaScript中undefined是一个特殊的值。在使用一个未声明的变量,或已声明但还未赋值的变量,以及并不存在的对象属性时,将返回undefined。
6.对象
var car={
brand:"Honda",
color:"Red",
run:function(){
//run
}
};
var value=car.brand;
JavaScript中的对象是可变的键值集合。对象是属性的容器,其中每个属性都拥有名字和值。属性的名字可以是包括空字符串在内的任意字符串。属性值可以是除undefined值之外的任何值。
car.prototype.stop=function(){
//stop
};
car.run();
每个对象都连接到一个原型对象,并且它可以从中继承属性。原型连接在更新时是不起作用的。它只有在检索值的时候才被使用。
模块化:
var App={};
App.employee={
name:"Joyce"
}
App.customer={
name:"Jason"
}
7.函数
var add=function(a,b){
return a+b;
};
add(1+2);
JavaScript中函数就是对象。函数可以被定义在其它函数中。一个内部函数可以访问包围它的外部函数的参数和变量。这被称为闭包。
闭包:
var car=function(brand,color){
return {
getBrand:function(){
return brand;
},
getColor:function(){
return color;
}
};
};
var myCar=car("Honda","Red");
myCar.getBrand();
函数化继承:
var mammal = function (spec) {
var that = {};
that.getName = function () {
return spec.name;
};
that.says = function () {
return spec.saying || '';
};
return that;
};
var myMammal = mammal({name: 'Herb'});
var cat = function (spec) {
spec.saying = spec.saying || 'meow';
var that = mammal(spec);
that.purr = function (n) {
//purr
};
that.getName = function () {
return that.says() + ' ' + spec.name + ' ' + that.says();
};
return that;
};
var myCat = cat({name: 'Henrietta'});
8.数组
var colors=["Red","Yellow","Blue"];
var value=colors[0]; //"Red"
数组和对象一样是键值集合。所不同的是,数组可以用整数做为属性名。数组还提供了一套非常有用的内置方法。
每个数组都有一个length属性。length属性的值是这个数组的最大整数属性名加上1。它不一定等于数组里的属性的个数。
9.正则表达式
var numberRegex=/^-?\d+(?:\.\d*)?(?:e[+\-]?\d+)?$/i;
numberRegex.test(1.2); //true
正则表达式分组:
() 捕获型分组
(?:) 非捕获型分组
正则表达式转义:
\\ \/ \[ \] \( \) \{ \} \? \+ \* \| \. \^ \$
\f 换页符
\n 换行符
\r 回车符
\t 制表符
\uXXXX 由4位16进制XXXX指定的Unicode字符
\d 匹配一个数字(等同于[0-9])
\1 捕获型分组1的引用(\2依此类推)
正则表达式类转义:
\- \\ \/ \[ \] \^
\b 退格符
\f 换页符
\n 换行符
\r 回车符
\t 制表符
\uXXXX 由4位16进制XXXX指定的Unicode字符
\d 匹配一个数字(等同于[0-9])
正则表达式量词:
? 匹配0或1次(同{0,1})
* 匹配0或多次(同{0,})
+ 匹配1或多次(同{1,})
{n} 匹配n次
{n,} 匹配至少n次
{n,m} 匹配至少n次,但不能超过m次
正则表达式标志:
g 执行全局匹配(所有匹配)
i 执行不区分大小写匹配
m 执行多行匹配(^和$能匹配行结束符)
复制代码 代码如下:
. [] () 属性存取及函数调用
delete new typeof + - ! 一元运算符
* / % 乘法,除法,取模
+ - 加法/连接,减法
>= <= > < 不等式运算符
=== !== 等式运算符
&& 逻辑与
|| 逻辑或
?: 三元运算符
二、语句:
1.if语句
复制代码 代码如下:
var dayOfWeek=0;
if(day===6){
}
else if(dayOfWeek===0){
}
else{
}
2.switch语句
复制代码 代码如下:
var dayOfWeek=0;
switch (dayOfWeek){
case 6:
break;
case 0:
break;
default:
break;
}
switch语句将switch表达式的值和所有指定的Case表达式进行精确匹配(===)。当找到一个匹配时,执行匹配的case从句中的语句。如果没有找到任何匹配,则执行可选的default语句。
3.while语句
复制代码 代码如下:
var count=0;
while (count<=10){
count++;
}
4.do/while语句
复制代码 代码如下:
var count=0;
do{
count++;
}while (count<=10);
5.for语句
复制代码 代码如下:
for (var count=0;count<=10;count++){
}
6.for/in语句
复制代码 代码如下:
var colors=["Red","Yellow","Blue"];
for (var color in colors){
}
7.try/catch语句
复制代码 代码如下:
try{
}
catch(e){
}
8.throw语句
复制代码 代码如下:
throw{
name:'ArgumentOutOfRangeError',
message:'year must > 0'
}
9.return语句
return "Red";
return语句会使一个函数提前返回。它也可以指定要被返回的值。如果没有指定返回表达式,那么其值是undefined。
三、类型:
1.数字
var value=1.0;
JavaScript只有一个单一的数字类型。他在内部被表示为64位的浮点数。
特殊数值:
NaN 非数字的特殊值
Infinity 无穷大的特殊值
2.字符串
var value="One";
JavaScript字符串是一个由16位的Unicode字符组成的序列。字符串字面量可以被包围在单引号或双引号中。
字符串转义:
\" \' \\
\b 退格符
\f 换页符
\n 换行符
\r 回车符
\t 制表符
\uXXXX 由4位16进制XXXX指定的Unicode字符
3.布尔值
var value=true;
布尔值只有2个值:true和false。
下列值被当作假值:
false
null
undefined
空字符串''
数字0
数字NaN
4.null
var value=null; //null
JavaScript中null是一个特殊的值,表示“无值”。
5.undefined
var value; //undefined
JavaScript中undefined是一个特殊的值。在使用一个未声明的变量,或已声明但还未赋值的变量,以及并不存在的对象属性时,将返回undefined。
6.对象
复制代码 代码如下:
var car={
brand:"Honda",
color:"Red",
run:function(){
//run
}
};
var value=car.brand;
JavaScript中的对象是可变的键值集合。对象是属性的容器,其中每个属性都拥有名字和值。属性的名字可以是包括空字符串在内的任意字符串。属性值可以是除undefined值之外的任何值。
复制代码 代码如下:
car.prototype.stop=function(){
//stop
};
car.run();
每个对象都连接到一个原型对象,并且它可以从中继承属性。原型连接在更新时是不起作用的。它只有在检索值的时候才被使用。
模块化:
复制代码 代码如下:
var App={};
App.employee={
name:"Joyce"
}
App.customer={
name:"Jason"
}
7.函数
复制代码 代码如下:
var add=function(a,b){
return a+b;
};
add(1+2);
JavaScript中函数就是对象。函数可以被定义在其它函数中。一个内部函数可以访问包围它的外部函数的参数和变量。这被称为闭包。
闭包:
复制代码 代码如下:
var car=function(brand,color){
return {
getBrand:function(){
return brand;
},
getColor:function(){
return color;
}
};
};
var myCar=car("Honda","Red");
myCar.getBrand();
函数化继承:
复制代码 代码如下:
var mammal = function (spec) {
var that = {};
that.getName = function () {
return spec.name;
};
that.says = function () {
return spec.saying || '';
};
return that;
};
var myMammal = mammal({name: 'Herb'});
var cat = function (spec) {
spec.saying = spec.saying || 'meow';
var that = mammal(spec);
that.purr = function (n) {
//purr
};
that.getName = function () {
return that.says() + ' ' + spec.name + ' ' + that.says();
};
return that;
};
var myCat = cat({name: 'Henrietta'});
8.数组
var colors=["Red","Yellow","Blue"];
var value=colors[0]; //"Red"
数组和对象一样是键值集合。所不同的是,数组可以用整数做为属性名。数组还提供了一套非常有用的内置方法。
每个数组都有一个length属性。length属性的值是这个数组的最大整数属性名加上1。它不一定等于数组里的属性的个数。
9.正则表达式
复制代码 代码如下:
var numberRegex=/^-?\d+(?:\.\d*)?(?:e[+\-]?\d+)?$/i;
numberRegex.test(1.2); //true
正则表达式分组:
() 捕获型分组
(?:) 非捕获型分组
正则表达式转义:
\\ \/ \[ \] \( \) \{ \} \? \+ \* \| \. \^ \$
\f 换页符
\n 换行符
\r 回车符
\t 制表符
\uXXXX 由4位16进制XXXX指定的Unicode字符
\d 匹配一个数字(等同于[0-9])
\1 捕获型分组1的引用(\2依此类推)
正则表达式类转义:
\- \\ \/ \[ \] \^
\b 退格符
\f 换页符
\n 换行符
\r 回车符
\t 制表符
\uXXXX 由4位16进制XXXX指定的Unicode字符
\d 匹配一个数字(等同于[0-9])
正则表达式量词:
? 匹配0或1次(同{0,1})
* 匹配0或多次(同{0,})
+ 匹配1或多次(同{1,})
{n} 匹配n次
{n,} 匹配至少n次
{n,m} 匹配至少n次,但不能超过m次
正则表达式标志:
g 执行全局匹配(所有匹配)
i 执行不区分大小写匹配
m 执行多行匹配(^和$能匹配行结束符)