语法
- 区分大小写
- typeof(关键字)不能用作变量、函数名或操作符
- 而typeOf则可以,O为大写,即它不是关键字也不是保留字
标识符
- 第一个字符必须是一个字母、下划线(_)或一个美元符号($)
- 其他字符可以是字母、下划线、美元符号或数字
采用驼峰大小写格式,例:
firstSecond myCar doSomethingImportant
- 区分大小写
- 关键字和保留字
- in是关键字
- 如果使用了关键字作标识符,会导致”Identified Expected”错误
变量
- 变量是松散类型的,即可以用来保存任何类型的数据
省略var操作符可以定义全局变量
- 在全局作用域中声明变量,不管变量是否使用var操作符创建,都是全局变量
在函数内声明变量(不推荐,因为在局部作用域中定义的全局变量很难维护)
function test() { message = "hi"; //全局变量(省略var) } test(); alert(message); //"hi"
function test() { var message = "hi"; //局部变量 } test(); alert(message); //错误!
- 初始化变量并不会把它标记为任何一种数据类型,只是给变量赋值而已。因此可以在修改变量值的同时修改值的类型
var message = "hi"; message = 100; //有效,但不推荐
数据类型
- 基本数据类型
- Undefined
- Null
- Boolean
- Number
- String
- 复杂数据类型
- Object(本质上是由一组无序的名值对组成的)
typeof操作符
- ”undefined”——如果这个值未定义
- “boolean”——如果这个值是布尔值
- “string”——如果这个值是字符串
- “number”——如果这个值是数值
- “object”——如果这个值是对象或null(null被认为是一个空的对象引用)
“function”——如果这个值是函数
从技术角度讲,函数在ECMAScript中是对象,不是一种数据类型。然而,函数也确实有一些特殊的属性,因此通过typeof操作符来区分函数和其他对象是有必要的。
几个使用typeof操作符的例子:
var message = "some string"; alert(typeof message); //"string" alert(typeof(message)); //"string",括号为非必需的,因为typeof是一个操作符而不是函数 alert(typeof 95); //"number"
- typeof与instanceof的区别
Undefined类型
已声明未经初始化的变量默认就会取得undefined值:
var message; alert(message == undefined); //true
变量已声明与未声明
var message; //这个变量声明之后默认取得了undefined值 var age //这个变量并没有声明 alert(message); //"undefined" alert(age); //产生错误 //所以当用typeof检测变量数据类型,结果为"undefined"的时候,有两种情况:要么是变量已声明为未初始化给它赋值,要么是变量没有声明。 alert(typeof message); //"undefined" alert(typeof age; //"undefined"
Null类型
从逻辑角度来看,null值表示一个空对象指针
var car = null; alert(typeof car); //"object"
如果定义的变量准备在将来用于保存对象,那么最好将该变量初始化为null而不是其他值。这样一来,只要直接检查null值就可以知道相应的变量是否已经保存了一个对象的引用:
if(car != null) { //对car对象执行某些操作 }
undefined值是派生自null值的
alert(null == undefined); //true
变量不应显式地赋值为undefined,而显式地给对象赋值为null则是推荐的做法:
var message = undefined; //不推荐 var car = null; //推荐
Boolean类型
- Boolean(undefined) = false;
Number类型
八进制(第一位必须是零(0),然后是八进制数字序列(0-7)。如果数值超出范围,那么前导零将被忽略,后面的数值将被当做十进制数值解析)
var octalNum1 = 070; //八进制的56 var octalNum2 = 079; //无效的八进制数值--解析为79(十进制) var octalNum3 = 08; //无效的八进制数值--解析为8(十进制)
十六(前两位必须是0x,后跟0-9、A-F(可大写也可小写))
var hexNum1 = 0xA; //十六进制的10 var hexNum2 = 0x1f; //十六进制的31
浮点数值
- 保存浮点数值需要的内存空间是保存整数值的两倍
- 永远不要测试某个特定的浮点数值。浮点数值的最高精度是17位小数,然而进行算术计算时其精确度远远不如整数
if(a + b == 0.3) //不要做这样的测试! { alert("You got 0.3."); }
Number.MIN_VALUE———5e-324
Number.MAX_VALUE———1.7976931348623157e+308NaN
- 在ECMAScript中任何数值除以0会返回NaNR
- 任何涉及NaN的操作(例如NaN/10)都会返回NaN
NaN与任何值都不相等,包括NaN本身
alert(NaN == NaN); //false
isNaN()函数(是否不是数值)
alert(isNaN(NaN)); //true alert(isNaN(10)); //false(10是一个数值) alert(isNaN("10")); //false(可以被转换为数值10) alert(isNaN("BLUE")); //true(不能被转换成数值) alert(isNaN("true")); //false(可以被转换成数值1)
String类型
- toString()
- 除null和undefined外其他数据类型都有这个方法
- String()
- 如果值有toString()方法,则调用该方法(没有参数)并返回相应的结果
- 如果值是null,则返回”null”
- 如果值是undefined,则返回”undefined”
var value1 = 10; var value2 = true; var value3 = null; var value4; alert(String(value1)); //"10" alert(String(value2)); //"true" alert(String(value3)); //"null" alert(String(value4)); //"undefined"
- toString()
Object()类型
- 通过执行new操作符后跟要创建的对象类型的名称来创建
var o = new Object();
- 通过执行new操作符后跟要创建的对象类型的名称来创建
- 基本数据类型