JavaScript高级程序设计 第三章 — 基本概念
语法
区分大小写
ECMAScript中的一切(变量、函数名和操作符)都区分大小写。
比如:变量名test和变量Test分别表示不同的变量。
标识符
标识符:指变量、函数、属性的名字,或者函数的参数。一般采用驼峰式。例如:myCar。
- 第一个字符必须是一个字符、下划线(_)、或美元符号($)
- 其它字符可以是字符、下划线、美元或数字
注意:不能把关键字、保留字、true、false和null用作标识符。
注释
单行注释:
//单行注释
块级注释:
/*
* 这是一个多行
* (块级)注释
*/
关键字和保留字
ECMA-262描述了一组特定用途的*关键字*,可用于表示控制语句的开始或者结束,或用于执行*特定操作*。关键字
关键字 | |||
---|---|---|---|
break | do | instanceof | typeof |
case | else | new | var |
catch | finally | return | void |
continue | for | switch | while |
debugger | function | this | with |
default | if | throw | |
delete | in | try |
保留字
保留字 | |||
---|---|---|---|
abstract | enum | int | short |
boolean | export | interface | static |
byte | extends | long | super |
synchronized | final | native | char |
class | float | package | throws |
const | goto | private | transient |
implements | double | import | volatile |
protected | public |
变量
ECMAScript的变量是松散类型的,可以保存任何类型的数据。 function test(){
var message ="hi"; //局部变量
}
test();
alert(message); //错误!
注意: 在函数中使用var定义一个变量,这个变量在函数退出后就会被销毁。
function test(){
message ="hi"; //全局变量
}
test();
alert(message); // "hi"
虽然省略var可以定义全局变量,但不推荐,维护很麻烦。
数据类型
ECMAScript中5种简单的数据类型:Undefined、Null、Boolean、Number、String。还有一种复杂数据类型 — Object。typeof 操作符
typeof操作符可能返回以下某个字符串:
- “undefined”—– 未定义
- “boolean”—– 布尔型
- “string”—– 字符串
- “number”—– 数值
- “object”—– 对象或者null
- “function”—– 函数
Undefined
未初始化的变量会被自动赋予undefined
var message; //这个变量声明后默认取得undefined值
//下面这个变量并没有声明
// var age
alert(message); // "undefined"
alert(age); // 产生错误
alert(typeof message); // "undefined"
alert(typeof age); // "undefined"
Null类型
Null值表示一个空对象,typeof检测null值时返回“object”。
Boolean
该类型只有两个字面值:true和false。各数据类型及其对应的转换规则:
数据类型 | 转换成true | 转换成false |
---|---|---|
Boolean | true | false |
String | 任何非空字符串 | “”(空字符串) |
Number | 任何非零数值 | 0和NaN |
Object | 任何对象 | null |
Number类型
- 浮点数值
var floatNum1 =1.1;
var floatNum2 =3.125e7 //31250000
// e表示的数值等于e前面的数值乘以10的指数次幂
数值范围
最小的数值保存在:Number.MIN_VALUE中
最大的数值保存在:Number.MAX_VALUE中NaN
NaN,即非数值(Not a Number)数值转换
有3个函数可以把非数值转换成数值:Number()、parseInt()、parseFloat()
var num1 = Number("Hello world !"); //NaN
var num2 = Number(""); //0
var num3 = Number("000011"); //11
var num1 = Number(true); //1
parseInt() — 返回整数
第一个字符不是数字字符或者负号,返回NaN。
第一个字符是数字字符,继续解析,直到遇到一个非数字字符。
字符串一“0x”开头且后跟数字字符,解析成十六进制整数。
var num1 = parseInt(""); //NaN
var num2 = parseInt("1234blue"); //1234
var num3 = parseInt("0xA"); //10(十六进制)
var num4 = parseInt("10",2); //2(按二进制解析)
var num5 = parseInt("10",8); //8(按八进制解析)
var num6 = parseInt("10",10); //10(按十进制解析)
parseFloat() — 返回小数
String类型
toString方法
数值、布尔值、对象和字符串值都有toString()方法。但null和undefined没有。
var num = 10;
alert(num.toString()); //"10"
alert(num.toString(2)); //"1010"(二进制)
alert(num.toString(8)); //"12"(八进制)
alert(num.toString(16)); //"a"(十六进制)
String()
如果有toString()方法,则调用该方法并返回结果;
如果值为null,返回”null”;
如果值为undefined,返回“undefined”;
Object类型
对象其实就是一组数据和功能的集合,对象可以通过 new 操作符后跟要创建的对象类型的名称来创建。
var o = new Object();
操作符
用于操作数据值的操作符,包括算数操作符、位操作符、关系操作符和相等操作符。
一元操作符
递增操作符 ++
递减操作符 - -
位操作符 *
布尔操作符
布尔操作符有3个:非、与、或。
- 逻辑非 (!)
alert(!false); // true
alert(!"blue"); // false
alert(!0); // true
alert(!"NaN"); // true
alert(!""); // true
alert(!12345); // false
同时使用两个逻辑非(!!),实际会模拟Boolean()转型函数的行为.
逻辑与(&&)
逻辑或(||)
乘性操作符
- 乘法(*)
- 除法(/)
- 求模(%)
var result = 26 % 5 ; // 等于1
加性操作符
- 加法(+)
- 减法(-)
关系操作符
小于、大于、小于等于和大于等于。
相等操作符
- 相等(==)
- 不等(!=)
null == undefined 返回 true
全等(===)
全等:表示未经转换就相等不全等(!==)
不全等:表示未转换就不相等
条件操作符
比如:
variable = boolean_expression ? true_value : false_value;
这行代码是基于 boolean_expression 求值的结果,决定给variable赋什么值。
值为true,变量 variable赋 true_value值
值为false,变量 variable赋 false_value值
代码:
var max = (num1 > num2) ? num1 : num2;
// max 会保存一个最大值
赋值操作符
- 赋值(=)
- 乘/赋值(*=)
- 除/赋值(/=)
- 模/赋值(%=)
- 加/赋值(+=)
- 减/赋值(-=)
var num =10 ;
num+= 10 ; // num = num + 10
逗号操作符
使用逗号操作符可以在一条语句中执行多个操作:
var num1=1, num2=2, num=3 ;
语句
if 语句
if 语句的语法:
if (condition) statement1 else statement2
if(i>25)
alert("大于25.");
else{
alert("小于等于25.");
}
if (condition1) statement1 else if (condition2) statement2 else statement3
if(i>25){
alert("大于25.");
}else if(i<25){
alert("小于25.");
} else {
alert("等于25.");
}
do-while 语句
do-while 后循环语句,先执行循环体中代码,再测试出口条件。
do{
statement
} while(expression);
示例:
var i = 0;
do{
i+=2;
} while (i < 10);
alert(i);
while 语句
var i = 0;
while( i<10 ){
i += 2 ;
}
for 语句
var count = 10 ;
for( var i= 0; i<count ; i++){
alert(i);
}
for-in 语句
for-in 语句是一种精准的迭代语句,可以用来枚举对象的属性。以下是语法:
for ( property in expression) statement
for (var propName in window){
document.write(proName);
}
label语句*
break 和 continue语句
break和continue语句用于循环中精确地控制代码的执行。
break语句:会立即退出循环,强制执行循环后面的语句
continue语句:虽然也是理科退出循环,但退出循环会从循环顶部继续执行。
with语句
with语句的作用是将代码的作用域设置到一个特定对象中
比如:
定义with主要是为了简化多次编写同一个对象。
var qs = location.search.substring(1);
var hostName = location.hostname;
var url =location.href;
上面几行都包含location对象,使用with可以改成:
with(location){
var qs = search.substring(1);
var hostName = hostname;
var url = href;
}
switch语句
switch语句是一种普遍使用的流程控制语句。
比如:
switch (expression){
case value : statement
break;
case value : statement
break;
case value : statement
break;
default : statement
}
switch语句中的每一种情形(case)的含义是:”如果表达式等于这个值(value),则执行后面的语句(statement)“。break 回导致代码执行跳出 switch语句。最后 default关键字表示不匹配前面任意一种情况,执行代码(相当于else)。
switch语句中可以使用任何数据类型,无论字符串,还是对象都可以。
注意: switch语句在比较值是使用的是全等操作符,不会发生类型转换。
比如:字符串
switch ("hello world") {
case "hello" + " world":
alert("Greeting was found.");
break;
default:
alert("Closing was found.");
}
或者:
var num = 25;
switch (true){
case num < 0:
alert("less than 0");
case num > 0:
alert("more than 0");
...
}
函数
函数的基本语法:
function functionName(arg0,arg1,…,argN){
statements
}
function sayHi(name,message){
alert("Hello " + name + "," + message);
}
sayHi("Nicholas","how are you today?");
函数在执行完 return语句之后停止并立刻退出。因此,位于 return语句之后的任何代码都不会执行。例如:
function sum(num1,num2){
return num1 + num2 ;
alert("Hello world"); //永远不会执行
}
小结
- 基本数据类型:Undefined、Null、Boolean、Number、String
- Object类型,一种复杂的数据类型,该类型是这门语言所有对象的基础类型
- 基本操作符:算数、布尔、关系、相等操作符及赋值操作符
- 控制流程的语句:if 语句、for 语句、switch 语句
- 函数参数是以一个包含零或多个值的数组形式传递的
- 函数可以传递任意数量的参数,通过 arguments对象访问
- 函数不能重载