基本概念
语法
- 区分大小写,ECMAScript中的一切(变量、函数名和操作符)都区分大小写。函数名不能使用typeof,因为它是一个关键字,但typeOf可以。
- 标识符,指的是变量、函数、属性的名字,或者函数的参数。第一个字符必须是一个字母、下划线或者$符号。不能将关键字、保留字、true、false和null用作标识符。
- 注释,包括单行注释和跨级注释。单行注释以两个斜杆开头,块级注释以一个斜杠和一个星号开头,以一个星号和一个斜杠结尾。
-
严格模式为JavaScript定义了一种不同的分析与执行模式。
function doSomething(){ "use stric"; //函数体 };
- 语句以一个分号结尾,如果省略分号,则由解析器确定语句的结尾。
关键字和保留字
- 关键字可用于表示控制语句的开始或者结束,或者用于执行特定操作等。 关键字是语言保留的,不能用作标识符。
变量
- 变量是松散型的,可以保存任何类型的数据。定义变量的时候要使用var操作符。
数据类型
- typeof操作符。"undefined"这个值未定义、"boolean"这个值是布尔值、"string"这个值是字符串、"number"这个值是数值、"object"这个值是对象或者null、"function"这个值是函数。
-
Undefined类型只有一个值,就是特殊的undefined。在使用var声明变量但未对其加以初始化时,这个变量的值就是undefined。一般不存在需要把一个变量设置为undefined的情况,字面值undefined的主要目的是用于比较。
var message;//这个变量声明之后默认取得了undefined值 //下面这个变量并没有声明 //var age alert(message);//"undefined" alert(age);//报错 alert(typeof message);//"undefined" alert(typeof age);//"undefined"
-
Null类型只有一个值,就是特殊的null,从逻辑角度看,null值是一个空对象指针,因此用typeof操作符检测null值时会返回"object"。undefined是派生自null的。
alert(null==undefined);//true
- Boolean类型有两个值,true和false。要将一个值转换成对应的Boolean值,可以调用Boolean()
-
Number类型包括整数和浮点数值,基本数值字面量格式是十进制整数,除了十进制外还有八进制十六进制。八进制第一位必须是0,十六进制第一位必须是0x。
- 浮点数值中必须包含一个小数点,并且小数点后面必须至少有一位数字。保存浮点数值需要的内存空间是保存整数的两倍。
- ECMAScript 能够表示的最小数值保存在Number.MIN_VALUE中,在大多数浏览器中,这个值是5e-324
- 能够表示的最大数值保存在Number.MAX_VALUE中——在大多数浏览器中,这个值是1.7976931348623157e+308。
- 如果某次计算的结果得到了一个超出JavaScript数值范围的值,那么这个数值将被自动转换成特殊的Infinity值。
- 具体来说,如果这个数值是负数,则会被转换成-Infinity负无穷,如果这个数值是正数,则会被转换成Infinity正无穷。
-
NaN是一个特殊数值,任何涉及NaN的操作都会返回NaN,NaN与任何值都不相等,包括NaN本身。
alert(isNaN(NaN))//true alert(isNaN(10))//false alert(isNaN("10"))//false alert(isNaN("blue"))//true alert(isNaN(true))//false
-
三种函数可以把非数值转换成数值,Number()、parseInt()、parseFloat()
var num1=Number("Hello world!")//NaN var num2=Number("")//0 var num3=Number("000011")//11 var num4=Number(true)//1 var num5=parseInt("1234blue"); // 1234 var num6=parseInt(""); // NaN var num7=parseInt("0xA"); // 10(十六进制数) var num8=parseInt(22.5); // 22 var num9=parseInt("070"); // 56(八进制数) var num10=parseInt("70"); // 70(十进制数) var num11=parseInt("0xf"); // 15(十六进制数) var num12=parseInt("AF", 16); //175 var num13=parseInt("AF"); //NaN var num14=parseInt("10", 2); //2 (按二进制解析) var num15=parseInt("10", 8); //8 (按八进制解析) var num16=parseInt("10", 10); //10 (按十进制解析) var num17=parseInt("10", 16); //16 (按十六进制解析) var num18=parseFloat("1234blue"); //1234 (整数) var num19=parseFloat("0xA"); //0 var num20=parseFloat("22.5"); //22.5 var num21=parseFloat("22.34.5"); //22.34 var num22=parseFloat("0908.5"); //908.5 var num23=parseFloat("3.125e7"); //31250000
-
String类型用于表示由零或多个16位Unicode字符组成的字符序列,字符串。可以用单引号或者双引号表示,没有区别。
- 字符字面量,也叫转义序列
- 字符串一旦创建就不可改变。
-
将一个值转换为字符串有两种方法,toString()、String(),null和undefined没有toString方法
var age = 11; var ageAsString = age.toString(); // 字符串"11" var found = true; var foundAsString = found.toString(); // 字符串"true" var num = 10; alert(num.toString()); // "10" alert(num.toString(2)); // "1010" alert(num.toString(8)); // "12" alert(num.toString(10)); // "10" alert(num.toString(16)); // "a" 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"
- 字符字面量,也叫转义序列
-
Object类型可以通过new创建,是一组数据和功能的集合。
var o=new Object();
操作符
-
一元操作符,只能操作一个值的操作符:递增递减操作符、一元和加减操作符
var num1 = 2; var num2 = 20; var num3 = --num1 + num2; // 等于 21 var num4 = num1 + num2; // 等于 21 var s1 = "2"; var s2 = "z"; var b = false; var f = 1.1; var o = { valueOf: function() { return -1; } }; s1++; // 值变成数值 3 s2++; // 值变成 NaN b++; // 值变成数值 1 f--; // 值变成 0.10000000000000009(由于浮点舍入错误所致) o--; // 值变成数值-2 var s1 = "01"; var s2 = "1.1"; var s3 = "z"; var b = false; var f = 1.1; var o = { valueOf: function() { return -1; } }; s1 = +s1; // 值变成数值 1 s2 = +s2; // 值变成数值 1.1 s3 = +s3; // 值变成 NaN b = +b; // 值变成数值 0 f = +f; // 值未变,仍然是 1.1 o = +o; // 值变成数值-1 var s1 = "01"; var s2 = "1.1"; var s3 = "z"; var b = false; var f = 1.1; var o = { valueOf: function() { return -1; } }; s1 = -s1; // 值变成了数值-1 s2 = -s2; // 值变成了数值-1.1 s3 = -s3; // 值变成了 NaN b = -b; // 值变成了数值 0 f = -f; // 变成了-1.1 o = -o; // 值变成了数值 1
-
位操作符,32位整数。对于有符号的整数,前31位用于表示整数的值,第32位用于表示数值的符号,0表示正数,1表示负数。按位非,用波浪线(~)表示,执行按位非的结果就是返回数值的反码。按位与,用&表示。按位或,由竖线表示。按位异或,由^符号表示。左移(<<)。右移(>>)。无符号右移(>>>)
var num1 = 25; // 二进制 00000000000000000000000000011001 var num2 = ~num1; // 二进制 11111111111111111111111111100110 alert(num2); // -26 var num1 = 25; var num2 = -num1 - 1; alert(num2); // "-26" var result = 25 & 3; alert(result); //1 25 = 0000 0000 0000 0000 0000 0000 0001 1001 3 = 0000 0000 0000 0000 0000 0000 0000 0011 --------------------------------------------- AND = 0000 0000 0000 0000 0000 0000 0000 0001 var result = 25 | 3; alert(result); //27 25 = 0000 0000 0000 0000 0000 0000 0001 1001 3 = 0000 0000 0000 0000 0000 0000 0000 0011 -------------------------------------------- OR = 0000 0000 0000 0000 0000 0000 0001 1011 var result = 25 ^ 3; alert(result); //26 25 = 0000 0000 0000 0000 0000 0000 0001 1001 3 = 0000 0000 0000 0000 0000 0000 0000 0011 --------------------------------------------- XOR = 0000 0000 0000 0000 0000 0000 0001 1010 var oldValue = 2; // 等于二进制的 10 var newValue = oldValue << 5; // 等于二进制的 1000000,十进制的 64 var oldValue = 64; // 等于二进制的 1000000 var newValue = oldValue >> 5; // 等于二进制的 10 ,即十进制的 2 var oldValue = 64; // 等于二进制的 1000000 var newValue = oldValue >>> 5; // 等于二进制的 10 ,即十进制的 2
-
布尔操作符,逻辑非(!)、逻辑与(&&)、逻辑或(||)
alert(!false); // true alert(!"blue"); // false alert(!0); // true alert(!NaN); // true alert(!""); // true alert(!12345); // false alert(!!"blue"); //true alert(!!0); //false alert(!!NaN); //false alert(!!""); //false alert(!!12345); //true var found = true; var result = (found && someUndefinedVariable); // 这里会发生错误 alert(result); // 这一行不会执行 var found = true; var result = (found || someUndefinedVariable); // 不会发生错误 alert(result); // 会执行("true")
- 乘性操作符,乘法(*)、除法(/)、求模(%)
-
加性操作符,加法,减法
var result1 = 5 + 5; // 两个数值相加 alert(result1); // 10 var result2 = 5 + "5"; // 一个数值和一个字符串相加 alert(result2); // "55" var result1 = 5 - true; // 4,因为 true 被转换成了 1 var result2 = NaN - 1; // NaN var result3 = 5 - 3; // 2 var result4 = 5 - ""; // 5,因为"" 被转换成了 0 var result5 = 5 - "2"; // 3,因为"2"被转换成了 2 var result6 = 5 - null; // 5,因为 null 被转换成了 0
- 关系操作符,返回布尔值。"23"和3比较,"23"小于3。
- 相等操作符,相等(==)、不相等(!=)、全等(===)、不全等(!==)
- 条件操作符,var max = (num1 > num2) ? num1 : num2;如果num1大于num2,则将num1的值赋给max,如果num1小于或等于num2,则将num2的值赋给max
- 赋值操作符
- 逗号操作符,多用于声明多个变量,还可用于赋值。var num=(5,4,3);//num值为3
函数
-
通过访问argument对象的length属性可以获知有多少个参数传递给了函数。函数没有重载,名字只属于后定义的函数
function howManyArgs() { alert(arguments.length); } howManyArgs("string", 45); //2 howManyArgs(); //0 howManyArgs(12); //1 function doAdd() { if(arguments.length == 1) { alert(arguments[0] + 10); } else if (arguments.length == 2) { alert(arguments[0] + arguments[1]); } } doAdd(10); //20 doAdd(30, 20); //50 function addSomeNumber(num){ return num + 100; } function addSomeNumber(num) { return num + 200; } var result = addSomeNumber(100); //300
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。