第3章 基本概念
一、语法
标识符:变量、函数、属性的名字,或者函数的参数。 规则:
- 第一个字符必须是一个字母、下划线(
_)或一个美元符号($) - 其他字符可以是字母、下划线、美元符号或数字
不能把关键字、保留字、true、false和null用作标识符。
严格模式:ECMAScript 5引入了严格模式,为JavaScript定义了一种不同的解析与执行模型。在严格模式下,ECMAScript 3中的一些不确定的行为将得到处理,而且对某些不安全的操作也会抛出错误。
// 在js顶部启用严格模式
"use strict";
// 在函数内指定严格模式
function doSomething(){
"use strict";
}
二、关键字和保留字
关键字:具有特定用途,可用于控制语句的开始或结束,或用于执行特定操作等。关键字也是语言保留的,不能用作标识符。
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 char final native synchronized class float package throws const goto private transient debugger implements protected volatile double import public
三、变量
松散类型:可以用来保存任何类型的数据,每个变量仅仅是一个用于保存值的占位符而已。
var message;// 未经过初始化的变量,会保存一个特殊的值——`undefined`
var message = "hi";// 初始化变量并不会把它标记为字符串类型,仅仅赋值
function test(){
var message = "hi"; // 局部变量,在函数退出后就会被销毁
}
test();
alert(message); // 错误!
function test(){
message = "hi"; // 全局变量,只要调用过一次`test()`函数,变量就有了定义,就可以在函数外部的任何地方被访问到。在严格模式下会导致抛出`ReferenceError`错误。
}
test();
alert(message); // "hi"
四、数据类型
- 5种简单数据类型:
Undefined、Null、Boolean、Number和String。 - 1种复杂数据类型:
Objecttypeof操作符:检测给定变量的数据类型 "undefined"——如果这个值未定义"boolean"——如果这个值是布尔值"string"——如果这个值是字符串"number"——如果这个值是数值"object"——如果这个值是对象或null"function"——如果这个值是函数
typeof 'message' // "string"
typeof('message') // "string"
`typeof null` // "object",`null`被认为是一个空的对象引用
1、Undefined
只声明了变量,但未对其进行初始化。
var message; // 这个变量声明之后默认取得了undefined值
var age // 这个变量并没有声明
alert(typeof message); // "undefined"
alert(typeof age); // "undefined"
2、Null
表示一个空对象指针,undefined值是派生自null值的
alert(null == undefined); //true,操作符出于比较的目的会转换其操作数
3、Boolean
虽然Boolean类型的字面值只有两个:true和false,但ECMAScript中所有类型的值都有与这两个Boolean值等价的值。要将一个值转换为其对应的Boolean值,可以调用转型函数Boolean()
4、Number
- 浮点数值:数值中必须包含一个小数点,由于保存浮点数值需要的内存空间是保存整数值的两倍,因此ECMAScript会不失时机地将浮点数值转换为整数值。
var floatNum1 = 1.; // 小数点后面没有数字——解析为1
var floatNum2 = 10.0; // 整数——解析为10
对于那些极大或极小的数值,可以用e表示法(即科学计数法)表示的浮点数值表示。ECMAScript会将那些小数点后面带有6个零以上的浮点数值转换为以e表示法表示的数值。
var floatNum = 3.125e7; // 等于31250000
var floatNum = 3e-17 // 等于0.00000000000000003
ECMAScript能够表示的最小数值保存在Number.MIN_VALUE,最大数值保存在Number.MAX_VALUE。超出数值范围的值将被自动转换成特殊的Infinity值。(-Infinity、Infinity)
// 使用`isFinite()`函数确定一个数值是不是有穷的
isFinite(Number.MAX_VALUE + Number.MAX_VALUE) //false
- NaN:非数值(Not a Number)是一个特殊的数值;任何涉及NaN的操作(例如NaN/10)都会返回NaN,NaN与任何值都不相等,包括NaN本身。
// isNaN()判断是否“不是数值”
alert(isNaN(NaN)); //true
alert(isNaN(10)); //false(10是一个数值)
alert(isNaN("10")); //false(可以被转换成数值10)
alert(isNaN("blue")); //true(不能转换成数值)
alert(isNaN(true)); //false(可以被转换成数值1)
- 数值转换:
Number()、parseInt()和parseFloat()
5、String
表示由零或多个16位Unicode字符组成的字符序列,即字符串。toString()把一个值转换为一个字符串。
数值、布尔值、对象和字符串值都有toString()方法。但null和undefined值没有这个方法。在不知道要转换的值是不是null或undefined的情况下,还可以使用转型函数String()。
6、Object
Constructor:保存着用于创建当前对象的函数,构造函数(constructor)就是Object()。hasOwnProperty(propertyName):用于检查给定的属性在当前对象实例中(而不是在实例的原型中)是否存在。isPrototypeOf(object):用于检查传入的对象是否是另一个对象的原型。propertyIsEnumerable(propertyName):用于检查给定的属性是否能够使用for-in语句来枚举。toLocaleString():返回对象的字符串表示,该字符串与执行环境的地区对应。toString():返回对象的字符串表示。valueOf():返回对象的字符串、数值或布尔值表示。通常与toString()方法的返回值相同。