JavaScript基本语法:
ECMAScript的语法大量借鉴了C以及其他类C语言的语法。
ECMAScript中的一切(变量、函数名、操作符)都区分大小写。
标识符:
含义:指变量、函数、属性的名字,或者函数的参数。
规则如下:
1. 第一个字符必须是一个字母、下划线、或一个美元符号($);
2. 其他字符可以是字母、下划线、美元符号或数字。
按照惯例:ECMAScript标识符采用驼峰大小写格式,也就是第一个字母小写,剩余每个单词的首字母大写。
不能将关键字、保留字true、false、null用作标示符。
注释:
单行://
多行:/* */
严格模式:
ECMAScript5引入了严格模式(strict mode),严格模式就是JavaScript定义了一种不同的解析与执行模式。在严格模式下,ECMAScript3中的一些不确定行为将得到处理,对于一些不安全的操作也会抛出错误。要在整个脚本中启用严格模式,可以在顶部添加如下代码:
“use strict”;
看起来这就像一个字符串,其实它就是一个编译指示(pragma),用于告诉支持的JavaScript引擎切换到严格模式。
严格模式也可以用到函数内部:
Function doSomething(){
“use strict”;
//函数体
}
严格模式下JavaScript的执行结果会有很大的不同。
语句:
ECMAScript中的语句以一个分号结尾;如果省略分号,则由解析器确定语句的结尾。
关键字和保留字:
Javascript 的保留关键字不可以用作变量、标签或者函数名。有些保留关键字是作为 Javascript 以后扩展使用。
abstract |
arguments |
boolean |
break |
byte |
case |
catch |
char |
class* |
const |
continue |
debugger |
default |
delete |
do |
double |
else |
enum* |
eval |
export* |
extends* |
false |
final |
finally |
float |
for |
function |
goto |
if |
implements |
import* |
in |
instanceof |
int |
interface |
let |
long |
native |
new |
null |
package |
private |
protected |
public |
return |
short |
static |
super* |
switch |
synchronized |
this |
throw |
throws |
transient |
true |
try |
typeof |
var |
void |
volatile |
while |
with |
yield |
* 标记的关键字是 ECMAScript5 中新添加的。
JavaScript 对象、属性和方法
您也应该避免使用 JavaScript 内置的对象、属性和方法的名称作为 Javascript 的变量或函数名:
Array |
Date |
eval |
function |
hasOwnProperty |
Infinity |
isFinite |
isNaN |
isPrototypeOf |
length |
Math |
NaN |
name |
Number |
Object |
prototype |
String |
toString |
undefined |
valueOf |
变量:
ECMAScript的变量是松散类型的,就是可以用来保存任何类型的数据。每一个变量仅仅是一个用于保存值的占位符而已。
定义变量:var 变量名; //像这种未初始化的变量会保存一个特殊的值-undefined
用var操作符定义的变量将成为定义该变量的作用域中的局部变量。也就是说,如果在函数中使用var定义一个变量,那么在这个函数退出后就会被销毁,在函数中定义变量省去var那么该变量就变成了全局变量,不建议这样用。
可以使用一个语句定义多个变量,逗号分开即可。
数据类型:
ECMAScript中有五种简单数据类型(也称为基本数据类型):Undefined、Null、Boolean、Number、String。还有一种复杂的数据类型---Object,它本质上是由一组无序的名值对组成。ECMAScript数据类型具有动态性,因此定义这几个类型就够了。
Typeof操作符:
用途:检测给定变量的数据类型。
“undefined”->未定义
“boolean”->布尔值
“string”->字符串
“number”->数值
“object”->对象或null
“function”->函数
Typeof是一个操作符而不是函数。
(从技术的角度讲,函数在ECMAScript中是对象,不是一种数据类型。然而函数也有一些特殊的属性,因此通过Typeof操作符来区分函数和其他对象是有必要的)
Undefined:
此类型只有一个值,即特殊的undefined。在使用var声明变量但未对其进行初始化,此变量的值就是undefined。
Null:
它是第二个只有一个值的数据类型,这个特殊的值为null。从逻辑角度来说,null值表示一个空对象指针,这也正是Typeof检测null时返回object的原因。
如果定义的变量准备在将来保存对象,那么最好将该变量初始化为null而不是其他值,这样只要直接检查null值就可以知道相应的变量是否已经保存了一个对象的引用。实际上undefined值是派生自null的,它们之间用相等操作符(==)总是返回true,不过这个操作符出于比较的目的会转换为其他操作数。尽管它们之间有这样的关系,但它们的用途完全不同。
Boolean:
此类型只有两个字面值:true/false。这两个值与数字值不一回事,并且区分大小写。
虽然它的值只有两个,但是ECMAScript中所有类型的值与这两个Boolean值等价的值。要将一个值转换为其对应的Boolean值,可以调用转型函数Boolean()。
数据类型 |
转换为true |
转换为false |
Boolean |
True |
False |
String |
任何字符串 |
“”空字符串 |
Number |
任何非零数值 |
0和NaN |
Object |
任何对象 |
Null |
Undefined |
N/A |
undefined |
Number:
它使用IEEE754格式来表示整数和浮点数值(浮点数值在某些语言中也被称为双精度数值)。为了支持各种数值类型,ECMA-262定义了不同的数值字面量格式。
最基本的数值字面量格式是十进制整数,除了十进制,还有八进制(第一位必须是0,然后数字序列为0~7,如果字面值中数值超出了范围,那么前导0将被忽略,后面的数子被当做十进制数值解析,在严格模式下八进制字面值是无效的,会导致JS引擎抛出错误)和十六进制(前面两位必须是0x,后跟十六进制数字0~9,A~F(或a~f))。在进行数字计算时都会转化为十进制进行计算。
鉴于Js中保存数值的方式,可以保存正零(+0)和负零(-0)。正零和负零被认为相等。
浮点数值:
所谓浮点数值,就是该数值必须包含一个小数点,并且小数点后面必须至少有一位数字。
由于保存浮点数值所需的内存空间是整数值的两倍,因此ECMAScript会不失时机地将浮点数转换为整数值。假如小数点后面没有任何数字就会最为整数值来保存。同样如果浮点数值本身表示的就是一个整数,那么该值也会被转换为整数。
对于那些极大值或极小值的数值,可以用e(或E)表示法(即科学计数法)表示的浮点数值。浮点数值的最高精度是17位小数。(注:浮点数值计算会产生误差,这是IEEE754数值浮点计算的通病)。
数值范围:
由于内存的限制,ECMAScript并不能保存世界上所有的数值。最小数值保存在:Number.MIN.VALUE,该数值是5e-324;最大数值保存在:Number.MAX.VALUE,该数值是1.7976931348623157e+308。如果计算结果超过该范围则自动转换为特殊的Infinity值,若为负数则为:-Infinity(负无穷);若为正数则为:Infinity(正无穷)。
如果某次计算返回了Infinity值,将无法进行下面的计算,因为Infinity不是能够参与计算的数值。想要确定一个数值是不是用穷的(也就是是不是位于最小和最大值之间),可以使用isFinite()函数。该函数参数位于最小和最大值之间将会返回true。
NaN:
NaN即非数值(Not a number)是一个特殊的数值,这个数值用于表示一个本来要返回数值的操作数未返回数值的情况(这样就不会抛出错误了)。在ECMAScript中,任何数值除以非数值会返回NaN,而不会影响其他代码的执行。(注:实际上0除以0才会返回NaN,整数除以0返回Infinitiy,负数除以0返回-Infinitiy)
两个特点:1>任何涉及NaN的操作都会返回NaN。
2>NaN与任何值都不相等,包括NaN本身。
根据以上两个特点,ECMAScript定义了isNaN()函数,该函数接受一个参数,该参数可以是任何类型,而这个函数会帮助我们确定这个参数是否不是数值。isNaN()接收到一个值后会尝试将这个值转换为数值。某些不是数值的值会直接转换为数值。
isNaN()也适用于对象。在基于对象调用isNaN()函数时,会首先调用函数的。
(未完待续。。。)