1、ECMAScript中,字符串并非以对象的形式来表示,即并非是引用类型。
2、存储:栈、堆?
源代码、程序运行时的数据是如何存储的?程序的运行过程详解。
3、变量前没有加var声明,是全局变量,但函数的参数变量前不管有没有加var,都是函数的局部变量?
每个函数都有一个属于自己的arguments数组?
4、typeof只是一个操作符:typeof 1 和 typeof(1) 都是合法的;
instanceof 也是一个操作符。
5、var o = null;o instanceof Object,结果为false?
var o = null;typeof o,结果为"object"
null并非Object的实例?Null是基本数据类型
在Java中,Object为基类,然后才有实例的概念,实例也就是对象;但在js中,并没有类的概念,Object本身就是对象,此时该如何区分对象和实例?
6、正则表达式?
7、[[Call]]方法?
8、Chrome F12 详解?
9、function sum(n1,n2){return n1 + n2;}:
typeof sum:"function"
typeof sum():"number"
sum():NaN
sum instanceof Object:true
10、Undefined、Null也是基本数据类型,且各有一个唯一值undefined、null,注意区分大小写。
11、执行环境及作用域:
执行环境:
定义了变量或函数有权访问的其他数据,决定了它们各自的行为;
这里的环境不是一个空间概念,是指程序中的环境(上下文):
对于进程而言,具体来说就是各个变量和数据,包括所有的寄存器变量、进程打开的文件、内存(堆栈)信息等。
由外到内,有多个执行环境(树状/父子/包含):
最外围的环境是全局执行环境,在web浏览器中就是window对象;
每个函数都有自己的执行环境;
ECMAScript程序中的执行流由环境栈机制控制着;执行流概念?
变量对象:
每个执行环境都有一个与之关联的变量对象;
环境中定义的所有变量和函数都保存在这个对象中;
变量对象可以表示执行环境;
当代码在一个环境中执行时,会创建变量对象的一个作用域链:
保证对 (执行环境有权访问的所有) 变量和函数的有序访问;
作用域链的前端,始终都是当前执行的代码所在环境的变量对象;
而标识符解析是沿着作用域链,从其前端开始,逐级地向后回溯。
总结速记:
执行环境分为全局和局部,局部就是函数的执行环境;
变量对象包含变量和函数,作用域链是逐级回溯搜索;
注意:
执行环境与变量对象一一对应,是静态的;
而变量对象的作用域链的前端是可以变化的,取决于当前执行的代码所在的环境,是动态的?
12、延长作用域链:
function buildUrl() { //现调用函数,作用域链的前端增加buildUrl()函数的执行环境对应的变量对象,记为A
var qs = "?debug=true"; //变量qs属于A
with(location){ /*现执行with语句,首先系统为location对象变量分配一个变量对象,记为B,用于包含location对象的所有属性和方法;
然后作用域链的前端再增加B;
注意此时B的执行环境与A的相同,即是buildUrl()函数的执行环境?*/
var url = href + qs; //这里定义的url变量仍然是在buildUrl()函数的执行环境中
}
return url;
}
总结:
示例中,作用域链的前端增加一个变量对象,但是前端的执行环境没有发生改变?
在with语句块外可以访问块中定义的变量;
在catch块的外部不可以访问到错误对象?
13、url详解
14、with语句 当前对象?
15、触发垃圾收集的变量分配、字面量和(或)数组元素的临界值被调整为动态修正?:
低于15%(注意这里的百分比应当是占已分配的内存):说明每个回收周期中有很多变量没有被回收,实际上是被占用,所以把临界值提高,增大垃圾回收的周期,减少垃圾回收的次数,提高性能。
16、如果网页中包含多个框架,就会存在两个以上不同的全局执行环境?
17、Object与Array是属于同级的吗?
答案是否定的;

对象是引用类型的一个实例
Array是Object的实例,arr是Array的实例;
Array既是引用类型,也是对象/实例?
18、arr.sort(compare)底层实现?类比迭代的实现
19、GMT、UTC、PST时间格式详解?:
alert(new Date()); 结果为:Mon Jan 08 2018 17:38:12 GMT+0800 (中国标准时间),显示的是北京时区;
alert(new Date(Date.parse("2018-05-01T02:30:30"))); 结果为:Tue May 01 2018 02:30:30 GMT+0800 (中国标准时间),基于本地时区;
alert(new Date("2018-05-01T02:30:30")); 结果为:Tue May 01 2018 02:30:30 GMT+0800 (中国标准时间),基于本地时区?;
alert(new Date(Date.UTC(2018,4,1,2,30,30))); 结果为:Tue May 01 2018 10:30:30 GMT+0800 (中国标准时间),基于GMT;
alert(new Date(2018,4,1,2,30,30)); 结果为:Tue May 01 2018 02:30:30 GMT+0800 (中国标准时间),此时日期和时间都基于本地时区而非GMT来创建?
20、一元加法操作符作用于对象,效果等同于Number(对象):会先调用对象的valueOf()方法,若结果为NaN,则再调用对象的toString()方法。
浙公网安备 33010602011771号