Javascript高级程序设计-第三章

语法:

ECMAScript中的一切(变量,函数名和操作符)都区分大小写。

标识符:

所谓标识符,就是指变量,函数,属性的名字,或者函数的参数。 标识符可以是按照下列规则组合的起来的一个或多个字符:

  1. 第一个字符必须是一个字母,下划线或一个美元符号;
  2. 其他字符可以是字母,下划线,美元符号或数字。

标识符中的字母也可以包含扩展的ASCII或者Unicode字母,但是不推荐这样做。
按照惯例,ECMAScript标识符采用驼峰大小写格式。也就是第一个字母大写,剩下的每个单词的首字母大写。
不能把关键字,保留字,true,false和null用作标识符。

注释:
  1. 单行注释:单行注释以两个斜杠开头 。
  2. 块级注释:以一个斜杠和一个星号开头,以一个星号和一个斜杠结尾。
严格模式:

ECMAScript5引入了严格模式的概念。严格模式是为javascript定义了一种不同的解析与执行模型,在严格模式下,ECMAScript3中的一些不确定的行为将得到处理,而且对某些不安全的操作也会抛出错误。

支持严格模式的浏览器包括IE10+,Firefox4+,Safari5.1+,Opera12+和Chrome.

  1. 要在整个脚本中启用严格模式,可以在顶部添加:“user strict" 。

用于告诉支持的javascript引擎切换到严格模式。

  1. 在函数内部的上方包含这条编译指示,也可以指定函数在严格模式下执行。
function doSomeing(){
	"user strict";
}
语句:

ECMAScript中的语句以一个分号结尾;如果省略分号,则由解析器确定语句的结尾。

var sum=a+b;

把多条语句组合到一个代码块中,即代码块以左花括号开头,以右花括号结尾。

if(test){
	alert(test);
}

关键字和保留字:

  1. 关键字:
    ECMAScript描述了一组具有特定用途的关键字,这些关键字可用于表示控制语句的开始或结束,或者用于执行特定操作等。按照规则,关键字也是语言保留的,不能用作标识符。

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

  1. 保留字:
    保留字还没有任何特定的用途,但有可能在将来被用作关键字。

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,projected,volatile,double,import,public,let,yield

变量:

ECMAScript的变量是松散类型的。所谓松散类型就是可以用来保存任何类型的数据。换句话说,每个变量仅仅是一个用于保存值的占位符而已。定义变量时要使用var操作符后跟变量名。

//定义了一个名为message的变量,该变量可以用来保存任何值。像现在这样未经过初始化的变量,会保存一个特殊的值undefined。
var message;
//变量message保存了一个字符串值"hi"
var message="hi";
//可以在修改变量的同时修改值的类型
message=100;

用var操作符定义的变量将成为定义该变量的作用域中的局部变量。
也就是说,如果在函数中使用var定义一个变量,那么这个变量在函数推出后就会被销毁。

//变量message是在函数中使用var 定义的。当函数被调用时,就会创建该变量并为其赋值。函数调用完成之后,这个变量会立即被销毁。所以执行alert()就会导致错误。
function test(){
	var message="hi";
}
test();
alert(message);//错误!

可以省略var操作符从而创建一个全局变量。

不推荐。在局部作用域中定义的全局变量很难维护,也会由于相应变量不会马上就有定义而导致不必要的混乱。
给未经声明的变量赋值,在严格模式下会导致抛出ReferenceError错误。

//省略了var操作符,message成了全局变量。只要调用过一次test()函数,这个变量就有了定义,就可以在函数外部的任何地方被访问到。
function test(){
	message="hi";
}
test();
alert(message);//hi

可以使用一条语句定义多个变量,只要把每个变量用逗号分开即可。

在严格模式下,不能定义名为eval或arguments的变量,否则会导致语法错误。

var message="hi",age;

数据类型:

ECMAScript中有5种简单数据类型(也称为基本数据类型):Undefined,Null,Boolean,Number和String。还有一种复杂的数据类型Object。

Object本质上是由一组无序的名值对组成的。
ECMAScript不支持任何创建自定义类型的机制,所有值最终都将是这6种数据类型之一

typeof操作符:

检测给定变量的数据类型。
对一个值使用typeof操作符可能返回下列某个字符串:

  1. undefined:如果这个值未定义;
  2. boolean:如果这个值是布尔值;
  3. string:如果这个值是字符串;
  4. number:如果这个值是数值;
  5. object:如果这个值是对象或null;
  6. function:如果这个值是函数
var message="hi";
alert(typeof(message));//string

typeof操作符的操作数可以是变量,也可以是字面量。
typeof是一个操作符而不是一个函数,因此圆括号不是必须的。
typeof null会返回"object",因为特殊值null被认为是一个空的对象引用。
Safari5及之前版本,Chrome7及之前版本对正则表达式调用typeof操作符会返回function,而其他浏览器会返回object。
从技术角度讲,函数在ECMAScript中是对象,不是一种数据类型。然而,函数确实有一些特殊的属性,因此通过typeof操作符来区分函数和其他对象是有必要的。

Undefined类型:

Undefined类型只有一个值,即特殊的undefined。在使用var声明变量但未对其加以初始化时,这个变量的值就是undefined。

var message;
alert(message == undefined);//true
//使用undefined值显示初始化了变量message
var message=undefined;
alert(message==undefined);//true

对于尚未声明的变量,只能执行一项操作,即使用typeof操作符检测其数据类型,会返回ubdefined。

对未声明的变量调用delete不会导致错误,但没有意义,而且在严格模式下确实会导致错误。

var message;
alert(message);//undefined
alert(age);//产生错误
Null类型:

Null类型是第二个只有一个值的数据类型,这个特殊的值是null。从逻辑角度来看,null值表示一个空对象指针,所以使用typeof操作符检测数据类型的时候会返回object。

var car=null;
alert(typeof car);//object

如果定义的变量准备在将来用于保存对象,那么最好将该变量初始化未null而不是其他值。这样只要检查null值就可以知道相应的变量是否已经保存了一个对象的引用。

if(car != null){
	//对car对象执行某些操作
}

实际上,undefined的值是派生自null值,因此ECMAScript规定对他们的相等性测试要返回true。

alert(undefined == null);//true
Boolean类型:

该类型只有两个字面量:true和false。

true不一定等于1,false不一定等于0

ECMAScript中所有类型的值都有与这两个Boolean值等价的值。要将一个值转化为其对应的Boolean值,可以调用转型函数Boolean()。

任何非空字符串转化为true,空字符串转换为false。
任何非零数字(包括无穷大)转化为true,0和NaN转化为false。
任何对象转化为true,null转化为false。
undefined转换为false。

var message="hello";
var messageAsBoolean=Boolean(message);
var message="hello";
if(message){
	alert("true");
}
Number类型:

猜你喜欢

转载自blog.csdn.net/wsln_123456/article/details/88995173