严格模式
- 严格模式是为JavaScript定义了一种不同的解析与执行模型。在严格模式下,ECMAScript3中的一些不确定的行为将得到处理,而且对某些不安全的操作也会抛出异常。
- 支持严格模式的浏览器: IE 10+、Firefox 4+、Safari 5.1+、Opera12+和Chrome。
/*使用严格模式,可以在顶部添加以下代码*/
" use strict";
/*在函数体内部的上方包含这条编译指令,也可以指定函数在严格模式下执行*/
function doSomething() {
" use strict";
//函数体
}
JavaScript关键字和保留字
/*关键字*/
break
case catch continue
do debugger default delete
else
for finally function
if in instanceof
new
return
switch
this throw try typeof
var void
while with
/*保留字*/
abstract
boolean byte
char class const
debugger double
enum export extends
final float
goto
implements import int interface
long let
native
package private protected public
short static super synchronized
throws transient
volatile
yield
var操作符
/*可以只定义一个变量不赋值,此时的变量为undefined*/
var message;
/*定义变量的同时赋值*/
var message = "hi"; //赋给变量message一个字符串
fuction test() {
var message = "hi"; //在函数体内使用var定义的变量为局部变量
}
test();
alert(message); //此时会报错,因为局部变量在test函数退出后就会被销毁
/*这里可以省略var操作符使message变量变为全局变量,但不推荐使用,因为在局部作用域中定义的全局变量很难维护,有意的省略var操作符,也会由于相应变量不会马上就有定义二导致不必要的混乱。给未经声明的变量赋值在严格模式下会导致抛出ReferanceError错误。*/
var message = "hi",
found = "false",
age = 29;
- 在严格模式下,不能定义名为eval或arguments的变量,否则会导致语法错误。
JavaScript数据类型--使用typeof操作符可以检测变量的数据类型
- Undefined类型
Undefined类型只有一个值,即特殊的undefined。
var message
alert (message == undefined);//true
alert(typeof message) ; //undefined
/*此处声明了变量message,但未对齐赋值,所以message的值为undefined*/
/*此处还应注意,对于没有声明的变量只能使用typeof操作符检测其数据类型*/
// var age;
alert(age); //报错,因为age没有被声明
alert(typeof age); //undefined
/*从逻辑上看,null值表示一个空对象指针,使用typeof操作符检测null值会返回“object”*/
var car = null;
alert(typeof car); //object
/*如果想要定义一个变量来保存对象,最好将该变量初始化为null,这样可以直接检查null值就可以知道相应变量是否已经保存了一个对象的引用*/
if (car != null) {
//对car对象执行某些操作
}
- Boolean类型
该类型只有true和false两个字面值,区分大小写。
- Number类型
/*十进制*/
var intNum = 55; //整数
/*
八进制
第一位必须是0,如果字面值中的数值超出了范围,那么前导零被忽略,后面的的数值将会被当作十进制解析
八进制字面量在严格模式下是无效的,会导致支持该模式的JavaScript引擎抛出错误
*/
var octalNum1 = 070; //八进制56
var octalNum2 = 079; //无效的八进制数值,解析为79
/*
十六进制
十六进制字面值的前两位必须是0x,后跟任何十六进制数字(0~9及A~F),字母不区分大小写
*/
var hexNum1 = 0xA; //十六进制的10
/*
浮点数值
该数值中必须包含一个小数点,并且小数点后面必须至少有一位数字
*/
var floatNum1 = 1.1;
var floatNum2 = 3.125e7; //等于31250000
/*
数值范围: 5e~1.7976931348623157e+308
如果某次计算的结果超出了这个范围,将会被转换成-Infinity或Infinity,不会参与下一次计算
可以使用isFinite()函数检测一个属是不是有穷的,这个函数的参数位于最小与最大数值之间时会返回true
*/
var result = Number.MAX_VALUE + Number.MAX_VALUE;
alert(isFinite(result)); //false
/*
NaN
用于表示一个本来要返回数值的操作数未返回值的情况,这样就不会抛出错误
*/
alert(NaN/10); //NaN,任何涉及NaN的操作都会返回NaN
alert( NaN == NaN); //false,NaN和任何值都不等,包括其本身
alert(isNaN(NaN)); //true,isNaN()函数接受一个参数,可检测该参数是否“不是数值”
alert(isNaN(10)); //false(10是一个数值)
alert(isNaN(“10”)); //false(可以被转换成数值10)
alert(isNaN(“blue”)); //true(不能被转换成数值)
alert(isNaN(true)); //false(可以被转换成数值1)
/*因此,在调用isNaN()函数时,会先调用对象的valueOf()方法,确定该方法返回的值是否可以转化成数值,如果不能,则基于这个返回值再调用toString()方法,再测试返回值*/
/*
数值转换
有三个函数可以把非数值转换为数值:Number()、parseInt()和parseFloat()
*/
var num1 = Number("Hello World"); //NaN
var num2 = Number(""); //0
var num3 = Number("000011"); //11
var num4 = Number(true); //1
var num1 = parseInt("1234blue"); //1234
var num2 = parseInt(""); //NaN
var num3 = parseInt("0xA"); //10(十六进制)
var num4 = parseInt(22.5); //22
var num5 = parseInt("070"); //56(八进制)
var num6 = parseInt("70"); //70(十进制)
var num1 = parseFloat("1234blue"); //1234
var num2 = parseFloat("0908.5"); //908.5
var num3 = parseFloat("0xA"); //0
var num4 = parseFloat(22.5); //22.5
var num5 = parseFloat("22.34.5"); 22.34
var num6 = parseFloat("3.125e7"); //31250000
- String类型
String类型用于表示由零或多个16位Unicode字符组成的字符序列,即字符串,可以用双引号(“)或单引号(‘)表示。
/*字符字面量*/
\n //换行
\t //制表
\b //退格
\r //回车
\f //进纸
\\ //斜杠
\' //单引号('),在用单引号次奥是的字符串中使用
\\" //双引号("),在用双引号次奥是的字符串中使用
\xnn //以十六进制代码nn表示的一个字符(其中n为0~F)。例如,\x41表示“A”
\unnn //以十六进制代码nnnn表示的一个Unicode字符(其中n为0~F)。例如 ,\u03a3表示希腊字符Σ
/*
字符串的特点
字符串一旦创建,它们的值就不能改变,要改变某个变量保存的字符串,首席按要销毁原来的字符串,然后再用一个包含新值的字符串填充该变量
*/
var lang = "Java";
lang = lang + "Script";
alert(lang); //JavaScript
/*转换为字符串toString()方法和Sting()方法*/
var age = 11;
var ageString = age.toString(); //字符串“11”
var found = true;
var foundString = found.toString(); //字符串“true”
/*在不知道要转换的值是不是null或undefined的情况下可以使用String()方法*/
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"
/*创建自定义对象*/
var 0 = new Object();
/*Object的每个实例都具有以下属性和方法*/
constructor //保存用于创建当前对象的函数。对于当前例子而言,构造函数就是Object()。
hasOwnProperty(propertyName) //用于检查给定的属性当前对象实例中是否存在。作为参数的属性名必须以字符串形式指定。
isPrototypeOf(object) //用于检查传入的对象是否是当前对象的原型。
propertyIsEnumerable(propertyName) //用于检查给定的属性是否能够使用for-in语句来枚举。与hasOwnProperty()方法一样,作为参数的属性名必须以字符串形式指定。
toLocalString //返回对象的字符串表示,该字符串与执行环境的地区对应。
toString //返回对象的字符串表示。
valueOf //返回对象的字符串、数值或布尔值类型。通常与toString()方法的返回值相同。