Javascript的组成
一个完整的Javascript实现通常由三部分组成:
1.ECMAScript(ES):核心
2.BOM(Brower Object Model):浏览对象模型
3.DOM(Document Object Model):文档对象模型
ES规定了Javascript实现的各方面内容的语言描述,如语法、类型、语句、关键字、保留字、操作符、对象。
DOM是用于HTML的API,将整个页面映射成一个多层节点结构,HTML页面中的每个组成部分都是某种类型的节点,同时节点包含不同类型的数据。
BOM用于控制浏览器页面以外的部分,只处理浏览器窗口和框架。如弹出新浏览器窗口,移动、缩放、关闭浏览器窗口等等。
< script >元素
async:立即下载脚本,但不妨碍页面中的其他操作。
defer: 表示脚本延迟到文档完全被解析和显示之后再执行。
语法
变量
var:定义作用域中的局部变量。
数据类型
数据类型:Undefined、Null、Boolen、Number、String、Object。
- 可以使用
typeof操作符检测变量的数据类型(除了Null)。 从逻辑角度来看,Null值表示一个空对象指针,占用一个字节空间,所以用typeof检测null对象返回"object"类型。 - ES中字符串是不可变的,一旦创建,变量值不能修改。
- NaN与任何值都不等,包括本身。
- 数字进制转换parseInt(string,ary)。
- Object被复制时实际上是被赋值指针,新旧变量同时指向一个对象,修改其中一个,另一个变量也响应修改。
迭代方法
every()如果函数对每一项都返回true,则返回true。
filter()返回函数会返回true的项组成的数组。
forEach()无返回值。
map()返回每次函数调用的结果组成的数组。
var arr[1,2,3,4,5];
var filterResult = arr.filter(function(item,index,array){
return (item>2); #[3,4,5]
});
归并方法
reduce() 从左到右迭代数组的所有项,然后构建一个最终返回值。 reduceRight() 从数组最后一项开始,向前遍历到第一项,构建最终返回值。
var values = [1,2,3,4,5];
var sum = values.reduce(function(prev,cur,index,array){
return prev + cur;
});
var anothersum = values.reduceRight(function(prev,cur,index,array){
return prev + cur;
});
Function类型
- 没有重载
- 递归时使用arguments.callee
function factorial(num){
return num<=1? 1:arguments.callee(num-1);_
}
- 函数属性:apply、call、bind
apply、call作用相同,区别在于接收参数不同,使用call方法需要逐个列举出参数
bind方法会创建一个函数实例,其this值会被绑定到传给到传给bind()函数的值
function sum(num1,num2){
return num1+num2;
}
function callSum1(num1,num2){
return sum.apply(this,arguments);
}
function callSum2(num1,num2){
return sum.apply(this.[num1,num2]);
}
function callSum(num1,num2){
return sum,call(this,num1,num2);
}
alert(callSum(10,10));//20
alert(callSum1(10,10));//20
alert(callSum2(10,10));//20
window.color = "red";
var o = {color:"blue"}
function sayColor(){
alert(this,color);
}
sayColor.call(this); //red
sayColor.call(window); //red
sayColor.call(o); //blue
var objectSayColor = sayColor.bind(o);
objectSayColor(); //blue