JS面试题及答案
注:本文转自http://blog.csdn.net/xuejianwu/article/details/7871932,但对原文中有误或解释不明确的地方进行了校正和扩展说明.
一、JS闭包。
f = function() {return true;};
g = function() {return false;};
(function() {
if (g() && [] == ![]) {
f = function f() {return false;};
function g() {return true;}
}
})();
alert(f()); // true or false ?
------------------------
答案:
(function() {
if (g() && [] == ![]) {
//应该看成if((g() && [] )== ![])
//因为g()是false后面那个&&[]就没起作用 整个都是false
//![]也是false 所以if成立 进入if块内
f = function f() {return false;};
//重新定义f
function g() {return true;}
//这句没用
}
})();
alert(f());
//false
二、截取字符串abcdefg的efg
abcdefg
三、写出一下运算结果
alert(typeof(null)) // object
alert(typeof(undefined)) // undefined
alert(typeof(NaN)) // number
alert(NaN==undefined) // false
alert(NaN==NaN) // false
var str=”123abc”;
alert(typeof(str++)) // number :隐式类型转换
alert(str) // NaN
四、写出函数DateDemo的返回结果,系统时间假定为今天
function DateDemo(){
var d, s=”今天日期是:”;
d = new Date(); //假定今天是2010年8月17日
s += d.getMonth() + “/“; //js中的month是从0开始的,所以这个值会比当前实际月份小1
s += d.getDate() + “/“;
s += d.getYear();
return s;
}
结果:今天日期是:7/17/2010
五、写出程序运行的结果?
for(i=0, j=0; i<10, j<6; i++, j++);
k = i + j;
alert(k);
结果:12(小心陷阱)
- 用正 则怎样去掉重复的字符串,只保留一个
var str= “aaaebbbcccddd”;
str = str.replace(/(.)\1+/g,’$1’)
alert(str)
把字符串中所有单词的首字母都转换为大写 个
name = ‘aaa bbb ccc’; uw=name.replace(/\b\w+\b/g, function(word){ return word.substring(0,1).toUpperCase()+word.substring(1);} );
alert(uw)
1.以下哪个在JAVASCRIPT中会报错:
var a=();
var a=[];
var a={};
var a=//;
2.JAVA中有哪些保留字,越多越好,10个以上.
3.CSS中有几种声明方式.
4.写出你所知道的开源项目或软件,并说明他们的好处以及作用.
最佳答案
1,var a=();var a=//; 报错 两个不行!
2,const final volatile byte int char double float boolean private protected public package export importclass extends super interface abstract native goto static synchronize throws等 (注意:保留字不完全等同于关键字,所以人家既然问你保留字,就不要答关键字啦!)
3, 这题有点不知道怎么答,到底声明是什么意思? 是声明一个已经存在一个CSS有四种: 1.导入一个已经存在的CSS文件 2.直接在HARD里声明一个CSS代码段: 3.直接在网页元素里声明使用CSS: style=”color:red;” 4.@import方式引入。 如果是声明CSS类 , 则有三种: 直接标签名作为CSS类名称: TagName{ … } 以元素ID作为CSS类声明: #ID{…} 自定义CSS类名称 : .ClassName{}
4,开源的 客户端脚本的话就说说 ExtJS 她可以用来开发RIA也即富客户端的AJAX应用,是一个用javascript写的,主要用于创建前端用户界面,是一个与后台技术无关的前端ajax框架。因此,可以把ExtJS用在.Net、Java、Php等各种开发语言开发的应 用中。 而且,使用这个框架可以直接用一行代码实现非常漂亮的而且标准的网页控件界面,可以使用代码调用的控件来替代目前的流行网页布局,和WinForm程序一样,使得前端开发完全控件化。 Jquery也是优秀的前台框架,优点: 代码简练、语义易懂、学习快速、文档丰富。 jQuery是一个轻量级的脚本,其代码非常小巧,最新版的JavaScript包只有20K左右。 jQuery支持CSS1-CSS3,以及基本的xPath。 jQuery是跨浏览器的,它支持的浏览器包括IE 6.0+, FF 1.5+, Safari 2.0+, Opera 9.0+。 可以很容易的为jQuery扩展其他功能。 能将JS代码和HTML代码完全分离,便于代码和维护和修改。 插件丰富,除了jQuery本身带有的一些特效外,可以通过插件实现更多功能,如表单验证、tab导航、拖放效果、表格排序、DataGrid,树形菜单、图像特效以及ajax上传等。 除此之外,还有ProtoType,Bindows(JS框架) 服务,ZedGragh(.Net做统计图的),Spring,Hibernate,Structs,EJB,Jbpm等比较有名的。
网易JS面试题引起的讨论 2012-02-05 23:58
第一道:
var tt = ‘aa’;
function test(){
alert(tt); //underfined;
var tt = ‘dd’;
alert(tt); //dd
}
test();
第二道:
var myObject= {
num: 2,
add: function(){
this.num=3;
(function(){
alert(this.num); //underfined :因为这里的this指的是window对象!!这也是js语言的一个bug
this.num=4; //第一次执行后将在window对象中添加num属性,值为4
})();
alert(this.num) //3
}
}
myObject.add(); //分别弹出undefined和3
myObject.add(); //分别弹出4和3,因为第二次执行闭包中的alert时,window中已经存在num属性了,且值为4
本文主要是讲预编译。
1. 判定一个变量是否为undefined
当需要判断一个变量是否为 undefined 时,直接用 alert(om == undefined) 可能出错。因为 JS 如果引用未声明的变量,那么会出现JS错误,在上述例子中,如果 om 未曾声明,就会报 JS 错误。因此判断一个变量是 undefined,最好用这种方法 alert( typeof om == ‘undefined’ );
- JS 中没有块作用域,在函数中声明的变量在整个函数中都可用(无论是在函数开头处声明还是末尾处声明),如
Js代码
function() {
alert(om); // 显示 undefined
var om = ‘abc’;
alert(om); // 显示 abc
}
补充: 此规则并非只针对函数,在全局作用域也一样,应该理解为在js作用域中(分为全局作用域和函数作用域)声明的变量在该作用域中都可见.
- JS 在函数执行前将整个函数的变量进行声明,无论这个变量的声明语句有没有机会执行,如 Js代码
var om = “123” ;
function foo() {
alert(om); // 显示 undefined
if ( false ) \{
var om = 'abc' ; // 此处声明没有机会执行
\}
}
foo(); //undefined
今天工作需要,搜索下JS面试题,看到一个题目,大约是这样的
Js代码
问执行完毕后 x, y, z 的值分别是多少?
仔细看的人马上就知道了, x, y 和 z 分别是 1,undefined 和 undefined。
不过,如果将两个 add 函数修改一下,题目变为
Js代码
那么这时 y 和 z 分别是什么呢?我马上想到是 2 和 4,不过结果却是 4 和 4。
原因即是 JS 解释器的”预编译”:JS 解析器在执行语句前会将函数声明和变量定义进行”预编译”,而这个”预编译”,并非一个页面一个页面地”预编译”,而是一段一段地预编译,所谓的段就是一个
执行结果如何呢?
在 ff 下执行,与上面执行结果一样。打住,且在 IE6 下执行看看如何。
结果是弹出 “function” 和 “B executed!”,一切正常。
Google 了一下,有人说这是 IE 的 BUG。
那么,请看下面的代码
执行结果是”function”和”variable”。
JS解析器先预定义了 addB 变量为 undefined, 但是 addB 函数覆盖了此变量(预编译时变量是不赋值的,但函数体是参与预编译的),,因此一开始执行结果是 function,然后 addB 被赋值为 “variable”,因此最后执行结果是 “variable”,上面的代码即使变为
Js代码
结果也一样,这说明JS解析器先预声明变量,再预定义函数 ,因此上面代码中变量addB在函数addB之前被预声明,即使代码顺序上它在后.
小结一下:JS 在执行前会进行类似”预编译”的操作,而且先预定义变量再预定义函数。
======================================================================================
1、form中的input有哪些类型?各是做什么处理使用的?
2、table标签中border,cellpadding td标签中colspan,rowspan分别起什么作用?
3、form中的input可以设置readonly和disable,请问这两项属性有什么区别?
4、JS中的三种弹出式消息提醒(警告窗口、确认窗口、信息输入窗口)的命令是什么?
1、form中的input有哪些类型?各是做什么处理使用的?
text radio checkbox file button image submit reset hidden
2、table标签中border,cellpadding td标签中colspan,rowspan分别起什么作用?
border边界
cellpadding单元格内补白
cellspacing单元格与单元格之间的间距
colspan跨列数
rowspan跨行数
3、form中的input可以设置readonly和disable,请问这两项属性有什么区别?
readonly不可编辑,但可以选择和复制
disable不能编辑复制选择
4、JS中的三种弹出式消息提醒(警告窗口、确认窗口、信息输入窗口)的命令是什么?
alert
confirm
prompt
还没有评论,来说两句吧...