词法结构
javascript是Unicode字符集编写,是ASCII和Latin-1的超集
区分大小写
直接变量:12 1.2 "hello world" true false /javascript/gi(正则表达式直接量) null
标识符,必须以字母、下划线、美元符号开始
类型、值和变量
Math.pow(2,10)
Math.round(.6)
Math.ceil(.6)
Math.floor(.6)
Math.abs(-5)
Math.max(1,2,3)
Math.min(1,2,3)
Math.random()
Math.PI
Math.E
Math.sqrt(3)
Math.pow(3,1/3)
Math.sin(0)
Math.log(10)
Math.log(100)/Math.LN10
Math.log(100)/Math.LN2
Math.exp(3)
Infinity 正无穷的 NaN 非数字值
Javascript采用IEEE-754浮点数表示法(几乎所有现代编程所采用),
这是一种二进制表示法,可以精确分数(1/2、1/8、1/1024),而并不能精确表示类似0.1这样的数字
var x=.3-.2; var y=.2-.1; x==y
var s='hello, world';
s.length
s.charAt(0)
s.charAt(s.length-1)
s.substring(1,4)
s.slice(1,4)
s.slice(-3)
s.indexOf('l')
s.lastIndexOf('l')
s.indexOf('l',3)
s.split(', ')
s.replace('h','H')
s.toUpperCase()
var o={x:1},p={x:1};
o===p
var a=[],b=[];
a===b
var a=[];
var b=a;
a===b
var n=17;
n.toString(2)
"0"+n.toString(8)
"0x"+n.toString(16)
var n=123456.789;
n.toFixed(0)
n.toFixed(2)
n.toFixed(5)
n.toExponential(1)
n.toExponential(3)
n.toPrecision(7)
n.toPrecision(10)
parseInt()
parseFloat()
valueOf()
先调ToString()方法 没有则调用valueOf() 再没有就抛出类型异常
先调valueOf()方法 没有则调用ToString() 再没有就抛出类型异常
var scope='global';
function fn(){
console.log(scope);
var scope='local';
console.log(scope);
}
表达式和运算符
new Object()
new Object
var point={x:1,y:1};
"x" in point;
"z" in point;
"toString" in point;
var d=new Date();
d instanceof Date;
d instanceof Object;
d instanceof Number;
var a=[1,2,3];
a instanceof Array;
a instanceof Object;
直接调用eval解析为局部范围
别名调用eval解析为全局范围
语句
mainloop: while (token != null) {
continue mainloop;
}
compute_sum: if (matrix) {
for (var x = 0; x < matrix.length; x++) {
var row = matrix[x];
if (!row) break compute_sum;
for (var y = 0; y < row.length; y++) {
var cell = row[y];
if (isNaN(cell)) break compute_sum;
sum += cell;
}
}
success = true;
}
break语句带不带标签,它的控制权都无法越过函数的边界
continue语句和break语句类似,用在嵌套的循环中,可以跳出多层次的嵌套的循环体逻辑
break、continue语句在跟标签的时候不能有换行(因为JavaScript解析器会把换行补上分号;)
try-catch-finally
try先执行 出错先catch 再finally 如果try、catch有return 再返回之前会执行finally
如果finally有return语句,尽管已抛出异常,都会替代原抛出的异常正常的返回。
对象
ECMAScript5中,对象直接量中的最后一个属性后的逗号将会忽略
ECMAScript3中, 大部分实现了可忽略这个逗号,(IE8-、Opera会报错)
检测属性:in、hasOwnPreperty()、propertyIsEnumerable() propertyIsEnumerable继承的属性不算
数组
for (var i = 0, len = keys.length; i < len; i++) {
}
map()方法将调用的数组的每个元素传递给指定的函数,并返回一个数组,不改变原数组的值
var isArray = Function.isArray || function (o) {
return typeof o === "object" && Object.prototype.toString.call(o) === "[object Array]";
};
函数
函数里面的 arguments 对象非数组,arguments.callee属性指代当前正在执行的函数,调用匿名函数非常有用
var a = [function (x) { return x * x; }, 20];
a[0](a[1]);
Function()构造函数,全局作用域中执行的eval(),循环构造函数,执行效率会瘦影响
window.alert();
document.getElementById()