1、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
2、截取字符串abcdefg的efg
abcdefg
<script type="text/javascript">
var mytext=document.getElementByIdx_x_x("text");
var myvalue=mytext.innerHTML;
var jiequ=myvalue.substring(myvalue.length-3,myvalue.length);
alert(jiequ)
</script>
3、寫出一下運算結果
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
4、寫出函數DateDemo的返回結果,系統時間假定爲今天
function DateDemo(){
var d, s="今天日期是:";
d = new Date();
s += d.getMonth() + "/";
s += d.getDate() + "/";
s += d.getYear();
return s;
}
結果:今天日期是:7/17/2010
5、寫出程序運行的結果?
for(i=0, j=0; i<10, j<6; i++, j++){
k = i + j; javascript
結果:10(當心陷阱)php
var str= "aaaebbbcccddd";
str = str.replace(/(.)\1+/g,'$1')css
alert(str)html
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,JAVA! int char while for do switch void double float unsigned long try abstract super extent bool break case catch class delegate foreach in static void public private protected internal 等等 太多了 3, 這題有點不知道怎麼答,到底聲明是什麼意思? 是聲明一個已經存在一個CSS有三種: 1.導入一個已經存在的CSS文件 <link rel="stylesheet" type="text/css" href=""> 2.直接在HARD裏聲明一個CSS代碼段: <style type="text/css"> ..... </style> 3.直接在網頁元素裏聲明使用CSS: style="color:red;" 若是是聲明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,Jbmp等比較有名的前端
網易JS面試題引發的討論
第一道:
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.num=4;
})();
alert(this.num) //3
}
}
myObject.add();
本文主要是講預編譯。
1. undefined
當須要判斷一個變量是否爲 undefined 時,直接用
Js代碼
1. alert(om == undefined);
alert(om == undefined);
可能出錯。由於 JS 若是引用未聲明的變量,那麼會出現JS錯誤,在上述例子中,若是 om 不曾聲明,就會報 JS 錯誤。所以判斷一個變量是 undefined,最好用這種方法
Js代碼
1. alert( typeof om == 'undefined' );
alert(typeof om == 'undefined');
2. JS 中沒有塊做用域,在函數中聲明的變量在整個函數中均可用(不管是在函數開頭處聲明仍是末尾處聲明),如
Js代碼
function() {
alert(om); // 顯示 undefined
var om = 'abc';
alert(om); // 顯示 abc
}
3. JS 在函數執行前將整個函數的變量進行聲明,不管這個變量的聲明語句有沒有機會執行,如
Js代碼
1. function () {
2. alert(om); // 顯示 undefined
3. if ( false ) {
4. var om = 'abc' ; // 此處聲明沒有機會執行
5. }
6. }
======================================================================
今天工做須要,搜索下JS面試題,看到一個題目,大約是這樣的
Js代碼
<script>
var x = 1, y = z = 0;
function add(n) {
n = n+1;
}
y = add(x);
function add(n) {
n = n + 3;
}
z = add(x);
</script>
問執行完畢後 x, y, z 的值分別是多少?
仔細看的人立刻就知道了, x, y 和 z 分別是 1, undefined 和 undefined。
不過,若是將兩個 add 函數修改一下,題目變爲
Js代碼
<script>
var x = 1, y = z = 0;
function add(n) {
return n = n+1;
}
y = add(x);
function add(n) {
return n = n + 3;
}
z = add(x);
</script>
那麼這時 y 和 z 分別是什麼呢?我立刻想到是 2 和 4,不過結果倒是 4 和 4。
這說明,在第一次調用 add 函數以前,第二個 add 函數已經覆蓋了第一個 add 函數。原來,這是 JS 解釋器的"預編譯",JS 解析器在執行語句前會將函數聲明和變量定義進行"預編譯",而這個"預編譯",並不是一個頁面一個頁面地"預編譯",而是一段一段地預編譯,所謂的段就是一個 <script> 塊。且看下面的代碼
Js代碼
<script>
function add(n) {
return n = n+1;
}
alert(add(1));
</script>
<script>
function add(n) {
return n = n+3;
}
alert(add(1));
</script>
會分別彈出 2 和 4。
那麼,將上面的題目再變換一下,以下
Js代碼
<script>
alert(typeof addA);
addA();
function addA() {
alert("A executed!");
};
</script>
<script>
alert(typeof addB);
addB();
var addB = function() {
alert("B executed!");
};
</script>
執行結果是什麼呢? 按照前面的知識,第一個 <script> 塊執行正常,結果就是彈出 "function" 和 "A executed!" 的對話框。
那麼第二個 <script> 塊呢? 執行結果是彈出 "undefined" 的對話框後報 JS 錯誤,說 addB 不是一個 function。
有點出乎意料?呵呵,其實第一個 script 塊中的 addA 一句是函數聲明,固然進行了"預編譯",可是第二個 script 塊中的 addB 一句並不是函數聲明。只不過在執行這段 <script> 以前對變量進行了"預聲明",所以一開始變量addB是存在的,只不過是 undefined 的(可參看http://eclipse07.javaeye.com/admin/blogs/484566 )。所以執行結果便如上面所示。
將題目再變化下,以下
Js代碼
<script>
alert(typeof addB);
addB();
var addB = function addB() {
alert("B executed!");
};
</script>
執行結果如何呢?
在 ff 下執行,與上面執行結果同樣。打住,且在 IE6 下執行看看如何。
結果是彈出 "function" 和 "B executed!",一切正常。
Google 了一下,有人說這是 IE 的 BUG。
那麼,請看下面的代碼
Js代碼
<script>
alert(typeof addB);
var addB = "variable";
function addB() {
alert("function addB");
}
alert(addB);
</script>
執行結果是"function"和"variable"。
JS解析器先預約義了 addB 變量爲 undefined, 可是 addB 函數覆蓋了此變量,所以一開始執行結果是 function,而後 addB 被賦值爲 "variable",所以最後執行結果是 "variable",上面的代碼即便變爲
Js代碼
<script>
alert(typeof addB);
function addB() {
alert("function addB");
}
var addB = "variable";
alert(addB);
</script>
結果也同樣,這說明JS解析器先預聲明變量,再預約義函數 。
小結一下:JS 在執行前會進行相似"預編譯"的操做,並且先預約義變量再預約義函數。
------------------
一、form中的input有哪些類型?各是作什麼處理使用的?
二、table標籤中border,cellpadding td標籤中colspan,rowspan分別起什麼做用?
三、form中的input能夠設置readonly和disable,請問這兩項屬性有什麼區別?
四、JS中的三種彈出式消息提醒(警告窗口、確認窗口、信息輸入窗口)的命令是什麼?
一、form中的input有哪些類型?各是作什麼處理使用的?
text radio checkbox file button image submit reset hidden
二、table標籤中border,cellpadding td標籤中colspan,rowspan分別起什麼做用?
border邊界
cellpadding邊距
colspan跨列數
rowspan跨行數
三、form中的input能夠設置readonly和disable,請問這兩項屬性有什麼區別?
readonly不可編輯,但能夠選擇和複製
disable不能編輯複製選擇
四、JS中的三種彈出式消息提醒(警告窗口、確認窗口、信息輸入窗口)的命令是什麼?
alert
confirm
prompt
var Prize = new Array();
Prize[0]="對講機";
Prize[1]="5Q幣";
Prize[2]="地下城與勇士禮包";
Prize[3]="10Q幣";
Prize[4]="QQ飛車禮包";
Prize[5]="1Q幣";
function startLuckDraw(){
//verify();
var number = document.fm.name.value;
var xmlhttp=getXMLHttp();
xmlhttp.open("GET","select.php?number="+number,true);
xmlhttp.send();
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
if(xmlhttp.responseText=="1")
{
alert("一個身份證號碼只能抽一次獎");
}
else
{
start();
}
}
}
}
function start()
{
var t=parseInt(18*Math.random());
if(t==18){t=0}
for(var i=0;i<18;i++)
{
document.getElementById("Prize"+i).className = "";
}
document.getElementById("Prize"+t).className="choose";
document.fm.displayBox.value=t;
meter=setTimeout("start()",100);
}
function endLuckDraw(){
clearTimeout(meter);
var x= document.fm.displayBox.value;
var number = document.fm.name.value;
var request=getXMLHttp();
request.open("GET","add.php?number="+number+"&prize="+Prize[x],true);
request.send();
if(Prize[x]!="謝謝參與"){
alert("恭喜您得到了獎品:"+Prize[x]+"!");}
else {alert("謝謝參與!")}
}
function getResult(){
var t = document.getElementsByTagName("ul")[0].firstChild;
var x = Number(document.getElementById("count").value);
var newNode = document.createElement("li");
var request=getXMLHttp();
request.open("GET","select2.php?id="+x,true);
request.send();
request.onreadystatechange=function(){
if (request.readyState==4 && request.status==200)
{
if(request.responseText){
var text = document.createTextNode(request.responseText);
newNode.appendChild(text);
document.getElementById("number").insertBefore(newNode,t);
document.getElementById("count").value=x+1;
}
//document.getElementById("123").innerHTML = request.responseText;
}
}
}
function verify(){
var phone = document.fm.name.value;
var tmp = /^1[3-9]\d{9}$/; //支持11位手機號碼驗證
var flag=tmp.test(phone);
if(!flag){
alert("手機號輸入不合法");
return false;
//startLuckDraw();
}
else {
startLuckDraw();
}
}
function getXMLHttp(){
var xmlhttp;
try {
// Mozilla / Safari / IE7
xmlhttp = new XMLHttpRequest();
} catch (e) {
// IE
var XMLHTTP_IDS = new Array('MSXML2.XMLHTTP.5.0',
'MSXML2.XMLHTTP.4.0',
'MSXML2.XMLHTTP.3.0',
'MSXML2.XMLHTTP',
'Microsoft.XMLHTTP' );
var success = false;
for (var i=0;i < XMLHTTP_IDS.length && !success; i++) {
try {
xmlhttp = new ActiveXObject(XMLHTTP_IDS[i]);
success = true;
} catch (e) {}
}
if (!success) {
throw new Error('Unable to create XMLHttpRequest.');
}
}
return xmlhttp;
}
//建立建立一個XMLHttpRequest對象
setInterval("getResult()",5000);java