非读程序题

flash和js通过什么类如何交互?

Flash提供了ExternalInterface接口与JavaScript通信,ExternalInterface有两个方法,call和addCallback:

  • ExternalInterface.addCallback(“在js里可调用的flash方法名”,flash内方法) //在flash中通过这个方法公开 在js中可调用的flash内的方法;
  • ExternalInterface.call(“js方法”,传给js的参数) //在flash里调用js里的方法

Js中typeof运算符可能的结果

  • “symbol”
    • typeof Symbol()
  • “boolean”
    • typeof Boolean()
  • “undefined”
    • typeof undefined
  • “string”
    • typeof String()
  • “number”
    • typeof Number()
  • “object”
    • typeof null
    • typeof Object()
  • “function”
    • typeof Function()
  • 不会产生NaN、null、array这样的结果

示例:

mark

读程序题

知识点:闭包、堆、栈

1
2
3
4
5
6
7
8
9
10
11
12
function Foo() {
var i = 0;
return function() {
console.log(i++);
}
}

var f1 = Foo(),
f2 = Foo();
f1();
f1();
f2();

结果:

0 1 0

原因:

  • Function是引用类型:保存在堆中,变量f1,f2是保存在栈中;
  • 闭包:一个函数(产生新的作用域)定义的局部变量、子函数的作用域在函数内,但是一旦离开了这个函数,局部变量就无法访问,所有通过返回子函数到一个变量f1的方法,让f1指向堆中的函数作用域,这样可以使用局部变量i。
  • 过程:
    • 第一次f1() :f1=Foo()中,先执行Foo(): i = 0,return值返回给f1
      (f1指向子函数 f1()=function(){…..},因为子函数没有 定义i,所以向上找到父函数定义的 i: )并执行子函数 输出i=0,再自加 i =1(覆盖了父函数Foo 的 i值);
    • 第二次f1() : 执行的是子函数 Function(){ ..},输出的是父函数 的 i=1,再自加 i =2;
    • 第一次f2():同第一次f1(),不同的是 f2指向堆中一个新的对象 function(){ …},所有此i非彼i,输出i=0;如果再次f2(),那么和第二次f1(),一样输出i=1;

知识点:作用域 局部变量 全局变量

1
2
3
4
5
(function(){
var a=b=5;
})();
console.log(b);
console.log(a);//结果:5,ReferenceError

这里a是局部变量,b是全局变量,代码可改为:

1
2
3
4
var b=5;
(function(){
var a=b;
})

知识点:windows变量 全局变量

1
2
3
4
if(! "a" in window){
var a=1;
}
alert(a);//结果弹出: undefined

“!”的优先级高于”in”

知识点: setTimeout

1
2
windows.setTimeout(checkState,10000);//表示10秒后执行checkState这个函数
windows.setTimeout(checkState(),10000);//先执行checkState,然后执行结果作为返回值传递给setTimeout

知识点:运算符 类型转换

mark

对于第二条:第一个“+”2””中的“+”是正负运算,可以将非数字转换为数字

mark

知识点:程序顺序

1
2
3
4
5
6
7
(function(){
var x=foo();
var foo=function foo(){
return "foobar";
};
return x;
})();//结果:类型错误

函数声明可以被提前,但函数表达式不能被提前,被提前的变量的默认值是undefined

splice函数

1
2
3
var a=[1,2,3,4,5];
a.splice(1,3,5,2,1,9);
console.log(a);

结果:[1, 5, 2, 1, 9, 5]

原因:splice,前面1,3表示从下标为1(第二个)开始,即2开始,删除3个数,注意这里是从2开始删除,2也会被删掉,这样剩下[1,5],然后将后面的数字从开始删除的位置加入到原数组当中。

零散知识点

  • var a=0;console.log(a++)=?console.log(++a)=?

    结果:第一个为0,第二个为1

  • “每个对象都有prototype属性”这句话是错的。

    比如var boj=Object.create(null),obj的原型是null,所以obj是没有prototype的。

  • ES6的基本数据类型为:Number、String、Null、Undefined、Symbol、Boolean。

    使用typeof可以检测出变量的基本数据类型,但是有个特例,就是null,它的typeof返回的是object,这是javascript的历史bug。

    原因请点这里

    Null类型和Undefined类型都只有唯一值,分别是null和undefined

    ES5的基本数据类型有5种:Undefined、Null、String、Number、Boolean,ES6新增了一类数据类型:Symbol。Object是属于复杂数据类型,所以基本数据类型有6个:Number、String、Null、Undefined、Symbol、Boolean。

  • ECMAScript有5种原始类型(primitive type),即Undefined、Null、Boolean、Number和String

  • 只要协议、域名、端口有任何一个不同, 都被当作是不同的域。

  • null是一种特殊的object,NaN是一种特殊的number

  • Js没有块级作用域

  • Js没有函数重载的概念,在其他语言(比如java)中,可以存在同名函数,只要传入的参数数量或者类型不同即可。在Js中,定义了两个同名函数后,后面的函数会覆盖前面定义的函数。

*

  • hasOwnProperty:是用来判断一个对象是否有你给出名称的属性或对象,不过需要注意的是,此方法无法检查该对象的原型链中是否具有该实行,该属性必须是对象本身的一个成员
  • isPrototypeOf:是用来判断要检查其原型链的对象是否存在于指定对象示例中,是则返回true,否则返回false
    • SQL又称结构化查询语言
    • Java是强类型语言,JavaScript是弱类型语言
  • 1<<4意思为:1*(2^4)=16,即想左移4位
  • “^”是异或运算

  • mark

  • contextmenu是当浏览者按下鼠标右键出现菜单或者通过键盘的案件出发页面菜单时触发的事件。可以在页面中加入onContentMenu=”return false”就可以禁止使用鼠标右键了

  • JS声明变量的时候,如果不用var,则声明的是全局变量。

  • JS中入如果重复声明一个变量,比如:var a=10;var a=100;则a的值为100,如果var 1=100;var a;则a的值为100,var a;无效。
  • 对于null、empty、0、false,Number默认把其转换为0,而对于undefined,Number则会将其转换为NaN
  • JavaScript的保留字有aoto、abstract、implements、super等等,array不是保留字
    JS保留字
  • JS中由于变量内容不停,变量被分为基本数据类型引用数据类型变量。
    • 基本类型变量用8字节内存,存储基本数据类型(数值、布尔值、null和未定义)的值
    • 引用类型变量则值保存对象、数组和函数等引用类型的值的引用(即内存地址)
    • JS中数字是部分类型的,也就是没有byte/int/float/double等类型差异
  • var t={}; typeof t;返回值是object,注意不是Object
  • typeof 是为了检查数据类型,instanceof是为了看一个变量是否是某个对象的实例。
  • object与Object的区别–链接