js本地对象、内置对象、宿主对象
20、宿主环境:一般宿主有外壳程序创建与维护,只有能够提供js引擎执行的环境都可称之为外壳程序。如:web浏览器,桌面应用系统,web浏览器和桌面应用系统造就的环境即宿主环境。
21、本地对象:独立于宿主环境的ECMA实现通过的对象。包括(Object、Function、Array、Boolean、Number、Date、RegExp(正则表达式)、Error、EvalError、ReferenceError、SyntaxError、TypeError、URLError)。本地对象就是ECMA定义的类(引用类型)。
22、eval()函数:可以把一个字符串当作一个JavaScript表达式一样去执行它。
23、内置对象:有ECMA提供,独立于宿主环境的所有对象,ECMA程序开发执行时出现。意味着开发者不必明确实例化内置对象,它已被实例化。
24、内置对象和本地对象的区别,共同点:都是独立于宿主环境。ECMA只定义了Global和Math两个内置对象(他们也是本地对象,根据定义,每个内置对象都是本地对象)。
25、Global对象:ECMA最特别的对象,因为实际它根本不存在,在ECMA中,不存在独立的函数,isNAN(),parselnt(),parseFloat方法,看起来是函数,实际上都是Global的方法。
26、宿主对象:由ECMA实现宿主环境提供的对象,理解为:浏览器提供的对象。所有BOM和DOM都是宿主对象。
27、自定义对象:开发人员自己定义的对象。
7、js错误捕捉
23、使用了try-catch,那么当出现异常的时候,IE浏览器会传递一个Error对象。
try{
sldfj
// throw new Error("-2","输入的值不能大于10");
}catch(e){
for(var p in e){
document.writeln(p + “=” + e[p]);
// alert("异常名字:"+e.name);
// alert("异常号:"+e.number);
// alert("异常的描述信息:"+e.description);
// alert("异常的错误信息:"+e.message);
}
}
输出:name=TypeError message=’sldfj’ 未定义 number=-2146823279 description=’sldfj’ 未定义
24、js错误类型。
//TypeError——当遇到一个意外的类型时引发该异常对象,如未声明的变量。
//SyntaxError——在解析js代码时,其中的语法错误引发该异常对象。
//ReferenceError——使用一个无效的引用时引发该异常对象。
//EvalError——在错误的调用eval函数时引发该异常对象。
//RangeError——在一个数字型变量的值超出了其范围时引发该异常对象。
//URIError——在错误的使用encodeURI或者decodeURI函数时引发该异常对象。
8、操作符
valueOf():
var o ={
varlueOf:function(){
return -1;
}
}
o--; //值变成数值-2
位操作符、逻辑操作符、关系操作符号、相当操作符号、赋值操作符号
9、语句
30、for-in是一种精准的迭代语句。可以枚举对象的属性。
for(var propName in window)
{
document.write(propName); //枚举window的所有属性。
}
31、for-in迭代到对象为null,undefined就会抛出错误。ECMA5修正这种行为,不抛出错误,而是不执行循环体。我兼容性,for-in之前检测对象不是null,undefined类型。
32、with语句的作用是将代码的作用域设置到一个特定的对象中。(with导致性能下降,调试麻烦,不建议使用)
理解参数
33、arguments包含函数的所有参数,访问:arguments[0], arguments.length传递了多少个参数。
34、ECMA中所有参数传递的都是值,不可能通告引用传递参数。
35、ECMA没重载,java重载(参数的类型,或者个数不同即可),ECMA的重载可以通告arguments实现。
作用域、变量、内存问题
变量
36、基本类型:值指简单的数据段。
37、引用类型:值指那些可能由多个值构成的对象。基本类型赋值是建立一个新值。
38、基本类型没有动态属性,引用类型可以添加动态属性。引用类型赋值是传引用。
传递参数
39、参数传递都是按值传的,在向参数传递引用类型的时候,会把这个值在内存中的地址赋值给一个局部变量,因此这个局部变量的变化会反映在函数外部。(##,**)。对对象进行重新定义,局部变量的变化不会反映在函数外部。
检查类型
40、基本数据类型:typeof,引用类型:instanceof 根据原型链来识别。
执行环境、作用域
41、在web浏览器中,全局执行环境是windows对象。某个执行环境中的所有代码执行完毕后,该环境被销毁(全局环境关闭浏览器或者网页时被销毁)。
作用域链
42、作用:保证对执行环境有权访问的所有变量和函数的有序访问。作用域链中下一个变量对象来自包含(外部)环境。一直延续到全局变量。
43、内部环境可以通过作用域链访问所有的外部环境。外部环境不能访问内部环境中的任何变量和函数。这些环境之间的联系是线性的,有次序的。每个环境都可以向上搜索作用域链,查询变量和函数名。任何环境不能向下搜索。
44、函数的参数也被当做变量来对待,访问规则和执行环境中的其他变量相同。
45、延长作用域链:try-catch 和 with
垃圾收集
管理内存
46、手工释放内存:globalperson=null
引用类型
47、object类型(js对象的创建方法):
var person = new Object();
person.name = "Nicholas";
person.age=29;
//
var person = { name:"Nicholas"; age:29}
48、var person = {} 与 new Object() 相同,推荐使用字面量表示法。
49、对象变量访问方法:person[‘name‘],person.name
Array类型
50、
var colors = new Array();
var colors = new Array(20);
var colors = new Array(‘red‘,‘blue‘,‘green‘);
51、length函数:数组的长度,它不是只读,还可以设置数组。
52、检测数组 value instanceof Array。 Array.isArray(value)。
转换方法
53、
- toLocalString()、toString()、valueOf()方法。
- 调用toString()是返回逗号拼接的字符串。
- valueOf还是数组。
- 为了创建字符串会调用数值每一项的toString()方法。
var colors = ["red","blue","green"]; // 创建一个包含3个字符串的数组。
alert(colors.toString()); //red,blue,green
alert(colors.valueOf()); //red,blue,green
alert(colors); //red,blue,green
由于alert()要接受的是一个字符串,所以所有会在后台调用toString()方法。
54、join方法
var colors = [‘red‘,‘grenn‘,‘blue‘];
alert(colors.join(",")); //red,green,blue
alert(colors.join("||")); //red || green || blue
55、栈方法:push()、pop()。栈LIFO(后进先出)
66、队列方法:FIFO(后进先出)。push(),shift()。unshift()在前端添加任意个数并返回新数组的长度。
67、重新排序:sort(),从小到大排序。reverse():反转顺序。
68、concat方法:基于当前数组的所以项创建一个新数组。
69、slice方法:基于当前数组中的一项或者多项创建一个新数组。
70、
- splice()方法:删除:可以删除任意数量的项,
- splice(0,2)会删除数组的前两项。
- 插入:向指定位置插入任意数量的项。
- splice(2,0,‘red‘,‘green‘)会在当前数组位置2插入字符串red和green。
- 替换:splice(2,1,‘red‘,‘green‘)会删除当前数组位置2的项,然后再从位置2开始插入字符串red和green。
71、位置方法:indexOf()方法从数组的开通(位置0)开始向后查找,lastIndexOf()方法则从数组的末尾开始向前查找。
72、迭代方法:every(),some()。numbers.every(function(item,index,array){return (item>2)}); 区别:every转入的函数必须对每一项都返回true,方法才返回true。some有一项是true就返回true。
73、
- filter:返回数组,利用指定函数确定是否在返回的数组中包含的某一项。
- map:返回数组,这个数组的每一项都是在原始数组中对于上运行传入的函数结果。
- forEach:没有返回值。只是对数组中的每一项运行传入函数。与for类似。
74、缩小方法:reduce() 和 reduceRight() 。迭代数组的所有值,构建最终返回值。reduce从数组的第一项开始,遍历到最后。reduceRight从数组最后一项开始,向前遍历到第一项。
DATA类型
75、toDataString()、toTimeString、toLocaleDateString、toLocaleTimeString、toUTCString。
RegExp类型
76、
function类型
77、函数是对象,函数名是指针。
function sum(num1+num2)
{
return num1+num2;
}
alert(sum(10,10)); //20
var anotherSum = sum;
alert(anotherSum(10,10)) ;//20
sum = null;
alert(anotherSum(10,10)); //20
78 、没有重载(深入理解):将函数名想象为指针,助于理解为什么ECMS没有重载。
79、函数声明与函数表达式:解析器会先读取函数声明,并使其在任何代码之前可用。至于函数表达式,则必须等到解析器执行到它所在的代码行,才会真正被解释执行。
aleft(sum(10,10));
function sum( num1+num2)
{
return num1+num2;
}
//以上代码正确执行
aleft(sum(10,10));
var sum = function ( num1+num2)
{
return num1+num2;
}
//以上代码执行产生错误,函数位于一个初始化语句中,而不是一个函数声明。
80、作为值的函数:ECMA函数名本身就是变量,不仅可以像传递参数一样把一个函数传递给另一个函数,还可以将一个函数作为另一个函数的结果返回。
function callSomeFunction(someFunction,someArgument)
{
return someFunction(someArgument);
}
function add10(num)
{
return num+10
}
var result1 = callSomeFunction(add10,10)
alert(result1 ); // 10