1、写出输出结果:

 

var str="abc123",
num=parseInt(str);
if(num==NaN
){
alert("NaN");
}
else if(num==123){
alert("123");
}
else if(typeof (num)=="number"){
alert("number");
}
else{
alert("str");
}

结果是执行alert(“number”),输出结果是”number”,主要考的是NaN不等于NaN;

2、分别写出下列表达式的值和数据类型,

var a= 1,
b="2";
var c=a>b?(a<b?a:b):(a==b?a:b
);
//
计算C的值是_____,数据类型为_______;
console.log(c
);
console.log(typeof c
);
//
结果是2string;题目主要考三目运算符

3、写出两个循环语句alert的输出结果,并解释原因;

for(var i=0;i<10;i++){
alert(i);
break;
}
alert(i
);
//
输出结果是00;因为break是退出循环,执行循环后面的代码;
for(var i=0;i<10;i++){
continue;
alert(i);
}
alert(i
);
//
输出结果只有一个10
// 因为continue
是退出本次循环,继续执行循环直到循环条件不满足;
// i=10的时候,循环不满足条件;所以结果是10

4、写出fun两次调用alert的输出结果;

function fun(abc){
var l=arguments.length;
var num=0;
for (var i=0;i<l;i++){
num+=arguments[i];
}
alert(num);
}
fun(1,2,3);
//6
fun(1,2,3,4);
//10

虽然fun的参数只写了abc三个,但是真正运算的是l;l是arguments的length;也就是说传几个参数就接收几个参数的;a,b,c只是迷惑的作用的;

5、写出函数fun执行后alert的输出结果,并说明原理;

var a=0;
function fun
(){
alert(a);
var a=10;
}
fun
();
alert(a
);

第一次alert输出”unfettered”,第二个是0;因为函数内也会做预解释,预解释的时候a是undefined;

而函数内var 的a 是局部变量。对外面没有影响,所以外面的alert结果是0;

如果考题中函数内var a=0换成a=0(没有var)

var a=0;
function fun
(){
alert(a);
a=10;
}
fun
();
alert(a
);

结果就是0和10;因为a对全局变量污染了。

6,写出下面代码的alert输出结果,并说明原理

var o={};
o.a=0
;
var b=o
;
b.a=10
;
alert(o.a)
//10
//
此题考查的是引用数据类型的机制问题;ob
是调用同一个堆内存地址的;

7、分别写出my_fun.b()和my_fun.c()执行时候alert的结果;

function fun(){
this.a=0;
this.b=function(){
alert(this.a);
}
};
fun.prototype=
{
b:function(){
this.a=20;
alert(this.a)
},
c:function(){
this.a=30;
alert(this.a)
}
};
var my_fun=new fun
();
my_fun.b
();
my_fun.c
();
//
结果是030
//因为my_funfun的一个实例;所以继承了fun里面的ab

// 执行my_fun.b()的时候,因为本身内部就有b。所以直接执行内部的b;弹出的就是内部的a。也就是0

// 执行my_fun.c()的时候,在my_fun本身找C,因为c在本身找不到,就通过my_fun.__proto__找到fun.prototype;上面有C;执行的结果就是30

// 所以结果是030

// **题目的BUG**:如果加fun.prototype,里面需要手动添加constructorfun,否则构造函数指向就变为object了,只有把constructor指向原来的函数,才是标准的构造函数,
可能是出题人考虑不周导致忘记写的;

8、执行下面代码,有几次alert输出,各是什么值;说明原理

var n=0;
function a
(){
var n=10;
function b(){
n++;
alert(n)
}
b();
return b;
}
var c=a();//
a的执行结果给ca的执行结果是alert(n),也就是11
c
();//c执行是是a的返回值;也就是再次alert(n),也就是12
alert(n);//n的值是0;因为用了闭包的机制,没有对全局对象进行污染;

答案:3次,分析如上面;

9、写出一个正则表达式用于匹配由数字和大写字母组成的字符串;

var b="S2324SS45462SDHASJKSA";
var reg=/^[A-Z0-9]+$/g
;
console.log(reg.test(b
));

10、下面代码的功能实现点击按钮,弹出对应的序列号;请问代码能不能实现,如果不能,现在的效果是怎么样的,应该怎么样修改能达到我们想要的效果;

<body>
<
div id="btnBox">
<
input type="button" value="button_1"/>
<
input type="button" value="button_2"/>
<
input type="button" value="button_3"/>
<
input type="button" value="button_4"/>
<
input type="button" value="button_5"/>
</
div>
</
body>
</
html>
<
script>
var btnBox=document.getElementById("btnBox");
var inputs=document.getElementsByTagName("input");
var l=inputs.length;
for(var i=0;i<l;i++){
inputs[i].onclick=function(){
alert(i);
}
}
</
script>

不能达到效果,点击任意一个按钮,弹出来的都是5;

因为是异步的了。onclick点击的时候,for循环已经结束了,此事后i就是5了;

修改的如下:

var btnBox=document.getElementById("btnBox");
var inputs=document.getElementsByTagName("input"
);
var l=inputs.length
;
for(var i=0;i<l;i++
){
inputs[i].index=i;//添加一个自定义的属性index
inputs
[i].onclick=function (){
alert(this.index);//然后引用添加的自定义属性;
}
}

11、如果用JS把这个DIV的class属性改为class_2

<div id="box" class="class-1"></div>

直接用下面就可以修改了

<script>
var oDiv=document.getElementById("box");
oDiv.className="class-2";
</
script>

12、简述Ajax的原理?

通过JS创建一个request对象,发起请求;从而实现局部刷新;

AJAX是通过下面四部实现的;

1、获取AJAX的实例;

2、通过什么方式,什么路径来获取数据;

3、设置请求主体里的数据,用于发送请求;(如果是get方式获取,可以不填,因为get的请求主体的空的)

4、设置函数,用于接收readystate发生改变时的值;

具体如下:

function getXHR(){
if(window.XMLHttpRequest){
return new XMLHttpRequest();
}
return new ActiveXObject('Microsoft.XMLHTTP');
}

//1、获取AJAX实例;
var instance=getXHR();
/*
* 2
、打开这个ajax对象

* 参数;http方法、请求服务器路径,是不是异步(默认是true)。url里面的username(默认是undefined)。url里面的possword(默认是undefined
* */
instance
.open('get','/url',true,'username','possword');//2
、打开这个ajax对象;

//3、把参数放在请求主体里;如果用get不需要写;因为get的请求主体是空的;
instance
.send('');

//4、每当readystate改变的时候,触发这个这个函数,负责接收;
/*
* 0
unsent 未发送,实例化的时候状态为这个;

* 1opened 打开实例,调用open方法之后,状态改变为这个;
* 2header-received 接收到服务器发送过来的响应头;
* 3loading 响应首部接收完毕,开始接受响应主体;
* 4done 全部完成
* 只有完成的时候才操作的;
* */
instance
.onreadystatechange=function
(){
if(this.readyState==4&&this.status==200){//this.readyState==4或者用this.readyState==this.DONE
console.log(this.response);//有兼容性;低版本IE不支持;IE8以下;
console.log(this.responseText);
console.log(this.responseXML);
}
}

13、跨域通信都有哪些方法?

jsonp、ajax、form、iframe(IE通过window.name,高级浏览器通过onmessage postmessage)

(最基本的是jsonp和iframe)

~~~~~~~~~~