网上搜的考题,互联网考题,分析思路;

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改变的时候,触发这个这个函数,负责接收;
/*
* 0unsent 未发送,实例化的时候状态为这个;

* 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)

~~~~~~~~~~

未经允许不得转载:朱邦邦的WEB前端开发博客 » 网上搜的考题,互联网考题,分析思路;

赞 (0)

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址