我的js錯題集(2)

1.如下 ECMAScript 變量命名格式正確的是javascript

A    _125doll
B    1207A
C    -dollor
D    var
正確答案:  A
解析:

_125dollhtml

ECMAScript——命名規範

一、js中是嚴格區分大小寫的
test和Test是兩個名字

二、使用駝峯命名法
第一個首字母小寫,其他每個有意義的單詞的首字母都要大寫
可使用字母、數字、下劃線、$命名,可是數字不能做爲開頭,如:
學生信息: studentInfo studentInfo2
人員的重要信息: personImportInfo
$person:一般項目中這種名字表明的是jQuery專用的名字

三、不能使用關鍵字和保留字
關鍵字:js中具備特殊意義的詞,咱們不能隨便拿來命名
保留字:將來可能會成爲關鍵字的

關鍵字:java

break程序員

casetypescript

catch編程

continue數組

default瀏覽器

delete安全

do服務器

else

finally

for

function

if

in

instanceof

new

return

switch

this

throw

try

typeof

var

void

while

with

保留字:

abstract

boolean

byte

char

class

const

debugger

double

enum

export

extends

final

float

goto

implements

import

int

interface

long

native

package

private

protected

public

short

static

super

synchronized

throws

transient

volatile

 

 

 

 

四、對於全局變量或者公用的變量咱們最好起名字的時候前面加上 _ ,例如:_this、_num這些都表明是公用的變量

 

2.  Number(true) 返回值爲

A   true
B   1
C   0
D   NaN
 
正確答案:  B
解析:1

轉換規則:

Number():

1)若是是Boolean值,true和false將分別轉換爲1和0。

2)若是是數字值,只是簡單的傳入和返回。

3)若是是null值,返回0。

4)若是是undefined,返回NaN。

5)若是是字符串,遵循下列規則:

若是是字符串中只包含數字(包括前面帶正號或負號的狀況),則將其轉換爲十進制數值,即「1」變成1,「123」會變成123,而「011」會變成11(前導的零被忽略了);
若是字符串中包含有效的浮點格式,如「1.1」,則將其轉換爲對應的浮點數值(一樣也會忽略前導零);
若是字符串中包含有效的十六進制格式,例如"0xf",則將其餘轉換爲相同大小的十進制整數值;
若是字符串是空的(不包含任何字符),則將其轉換爲0;
若是字符串中包含除上述格式以外的字符,則將其餘轉換成NaN.
6)若是是對象,則調用對象的valueOf()方法,而後依照前面的規則轉換返回的值。若是轉換的結果是NaN,則調用的對象的toString()方法,而後再次依照前面的規則轉換返回的字符串值。


3.代碼的輸出結果是 

var str = ''; 

for(var b = 1;b < 11;b ++){    

    str += 'helloworld<br>'; 

document.write(str);

A  helloworld

B  helloworld<br>
輸出10個helloworld
D  輸出10個helloworld<br>
正確答案:  C
解析:

循環10次,拼接字符串再一次性輸出

 

4.如下哪項不屬於javascript的特徵

 

A  Javascript是一種腳本語言

 

B  Javascript是事件驅動的

 

C  Javascript代碼須要手動編譯之後才能執行

 

D  Javascript是獨立於平臺的 

 

正確答案:  C

 

解析:

JavaScript是基於事件驅動並獨立於平臺的腳本語言

JavaScript的特色
(1).一種解釋性執行的腳本語言。
同其餘腳本語言同樣,JavaScript也是一種解釋性語言,其提供了一個很是方便的開發過程。JavaScript的語法基本結構形式與C、C++、Java十分相似。但在使用前,不像這些語言須要先編譯,而是在程序運行過程當中被逐行地解釋。JavaScript與HTML標識結合在一塊兒,從而方便用戶的使用操做。
(2).一種基於對象的腳本語言。
其也能夠被看做是一種面向對象的語言,這意味着JavaScript能運用其已經建立的對象。所以,許多功能能夠來自於腳本環境中對象的方法與腳本的相互做用。
(3).一種簡單弱類型腳本語言。
其簡單性主要體如今:首先,JavaScript是一種基於Java基本語句和控制流之上的簡單而緊湊的設計,從而對於使用者學習Java或其餘C語系的編程語言是一種很是好的過渡,而對於具備C語系編程功底的程序員來講,JavaScript上手也很是容易;其次,其變量類型是採用弱類型,並未使用嚴格的數據類型。
(4).一種相對安全腳本語言。
JavaScript做爲一種安全性語言,不被容許訪問本地的硬盤,且不能將數據存入服務器,不容許對網絡文檔進行修改和刪除,只能經過瀏覽器實現信息瀏覽或動態交互。從而有效地防止數據的丟失或對系統的非法訪問。
(5).一種事件驅動腳本語言。
JavaScript對用戶的響應,是以事件驅動的方式進行的。在網頁(Web Page)中執行了某種操做所產生的動做,被稱爲「事件」(Event)。例如按下鼠標、移動窗口、選擇菜單等均可以被視爲事件。當事件發生後,可能會引發相應的事件響應,執行某些對應的腳本,這種機制被稱爲「事件驅動」。
(6).一種跨平臺性腳本語言。
JavaScript依賴於瀏覽器自己,與操做環境無關,只要計算機能運行瀏覽器,並支持JavaScript的瀏覽器,就可正確執行,從而實現了「編寫一次,走遍天下」的夢想。

 

5.如下代碼執行後,分別彈出來的值是: var num1=1;   function testf1(){  num1=2;    var num1;  alert(num1); } function testf2(){  alert(num1); }   testf1();   testf2(); 

A  2,1
B  2,2
C  undefined,undefined
D  2,undefined
 
正確答案:  A
解析:

testf1函數先執行, 先進行變量提高, 且裏面的num1爲私有變量,不會更改全局變量

testf2 裏面的num1爲全局變量

 

6.下面哪些是循環語句

A  while

B  do...while

C  for

D  switch
 
正確答案:  A,B,C
解析:

while、do...while、for

1、循環的概念
循環就是重複執行一段代碼,是一種最能發揮計算機優點的程序結構。

循環結構的代碼由循環體、循環變量、和循環條件組成。當循環變量知足循環條件時會重複執行循環體內的代碼,直到循環變量不知足循環條件時就終止循環,接着執行循環結構後的代碼。

JS中有while、do while、for三種循環。

while(表達式){
循環體;
}

2、while語句
語法:

while(表達式){
循環體;
}

例:從1加到100

var i=1;
var x=0;
while(i<=100){
x=x+i;
i++;
}
alert(x);

while循環
要點:
1,循環變量要先初始化。
2,每次循環前判斷表達式,表達式成立後執行循環體語句。
3,循環體中,應有結束循環的條件(有個代碼朝着循環條件
不知足的方向靠近),不然會形成死循環。
4,當不肯定循環多少次時可用死循環。
5,循環體中能夠寫若干句合法的javaScript代碼,包括if,
也能夠再套個循環語句。

3、do while語句
語法:

do
{
循環體;
}while(表達式);

do while 和while的區別,do while先循環一次,後判斷循環條件。
也就是說不管如何都會執行一次循環體。
例: //一百之內奇數

var i=1;
do{
if(i%2!=0){
document.write(i+"<br/>");
}
i++;
}while(i<=100)

4、for循環
語法:

for(表達式1;表達式2;表達式3)
{
循環體;
}

利用三個表達式把循環控制與循環體分離,結構更加清晰。是使用最多的循環語句。
表達式1初始化循環變量,表達式2判斷循環條件,表達式3改變循環變量的值。

例: //一百之內奇數

for(var i=0;i<=100;i++){
if(i%2!=0){
document.write(i+"<br/>");
}
}

5、break和continue
1.continue
只能在循環語句中使用,使本次循環結束,即跳過循環體中continue下面還沒有執行的語句,接着進行下次是
否執行循環的判斷。
例:輸出100 之內的 奇數,不包含3 的倍數

for(var i=0;i<=100;i++){
if(i%2!=0){
if(i%3==0){
continue; //continue執行後document.write不在執行則會繼續執行循環語句
}
document.write(i+"<br/>");
}
}


2.break
break 語句功能:
1 ,在 switch 語句中使流程跳出( ( 終止 ) switch 結構 。
2 ,在 循環語句中使流程跳出( ( 終止) ) 當前循環。
注意:
1 ,如 果已執行 break 語句,就不會執行循環體中位於
break 後的語句 。
2 ,在 多層循環中,一個 break 語句只向外跳一層。
示例:
判斷一個數是否是合數。(能被1 1 和自身之外的整除)
判 斷一個數是否是素 數( ( 質數) ) 。
//判斷合數

for(var i=2;i<num1;i++){
if(num1%i==0){
alert("是合數");
break;
}
}

alert(「判斷完畢。」);

6、死循環,循環嵌套
1.死循環
死循環:循環條件永遠知足

while(true){
}
do{
}while(true);
for(循環語句){
}

2.循環嵌套
1 ,一個循環內包含完整的另外一個循環語句。
2 ,被 包。 含的循環語句叫內循環,包含別的循環的循環語句叫外循環。
3 ,外 循。 環每執行一次循環,內循環都會徹底執行全部循環次數。,
4 ,循 環嵌。 套的總執行次數是外循環次數乘之內循環次數。
注:可以使用瀏覽器的調試功能一步步查看循環嵌套的執行
例:打印三角形
for(var i=1;i<=4;i++){

for(var j=1;j<=i;j++){
document.write("星星")
}
document.write("<br/>");
}

7.如下是JavaScript基本數據類型的是

A  Object
B  number
C  string
D  boolean
 
正確答案:  B,C,D
解析: Object是引用類型

5種基本數據類型:

number

這種類型用來表示整數和浮點數值,還有一種特殊的數值,即NaN(非數值 not a number)。

var b = 2 / 0 ; console.log(typeof(b)); //輸出的結果爲NaN 

string

string用於表示由零、數字或字符組成的字符序列,即字符串。字符串能夠由英文單引號'或雙引號"表示。

var year = "2017年"; console.log(typeof(year)); // 輸出的結果爲string var thing = "abcd12345@?"; console.log(typeof(thing)); // 輸出的結果爲string 

boolean

該類型只有兩個字面值:true和false。這兩個值與數字值不要混爲一談,所以true不必定等於1,而false也不必定等於0。雖然Boolean類型的字面值只有兩個,但JavaScript中全部類型的值都有與這兩個Boolean值等價的值。

var a = 5; var b = 3; console.log(typeof(a > b)); // 輸出結果爲boolean 

下表爲任何數據類型與布爾值的等價值:

數據類型 轉換爲true的值 轉換爲false的值

數據類型 轉換爲true的值 轉換爲false的值
boolean true false
string 任何非空的字符串 ""(空字符串)
number 任何非0數值(包括無窮大) 0和NaN
object 任何對象 null
undefined !undefined undefined

undefined

在使用var聲明變量但未對其加以賦值時,這個變量的值就是undefined。

var a ; console.log(typeof(a)); //輸出結果爲undefined 

null

從邏輯角度來看,null值表示一個空對象,故使用typeof關鍵字檢測null時會返回object。

var cat = null; console.log(typeof(cat)); // 輸出結果爲object 

這裏須要注意undefined和null,實際上,undefined值是派生自null值的。儘管null和undefined有這樣的關係,但它們的用途徹底不一樣。若是變量旨在保存一個對象但尚未保存對象時,能夠聲明變量並賦予變量初始化的null值。

 

8.JavaScript運算符都有哪些 

賦值運算符
算術運算符
關係運算符
邏輯運算符
 
正確答案:  A,B,C,D
解析:賦值運算符=、數學運算符+ - * / %、一元運算符++  --、邏輯運算符&&  || !
 

JavaScript 算數運算符

算數運算符用於對數字執行算數運算:

運算符 描述
+ 加法
- 減法
* 乘法
/ 除法
% 係數
++ 遞加
-- 遞減

註釋:JS 算數這一章對算數運算符進行了完整描述。

JavaScript 賦值運算符

賦值運算符向 JavaScript 變量賦值。

運算符 例子 等同於
= x = y x = y
+= x += y x = x + y
-= x -= y x = x - y
*= x *= y x = x * y
/= x /= y x = x / y
%= x %= y x = x % y

加法賦值運算符(+=)向變量添加一個值。

JavaScript 比較運算符

運算符 描述
== 等於
=== 等值等型
!= 不相等
!== 不等值或不等型
> 大於
< 小於
>= 大於或等於
<= 小於或等於
? 三元運算符

註釋:JS 比較這一章中完整描述了比較運算符。

JavaScript 邏輯運算符

運算符 描述
&& 邏輯與
|| 邏輯或
! 邏輯非

註釋:JS 比較這一章中完整描述了邏輯運算符。

JavaScript 類型運算符

運算符 描述
typeof 返回變量的類型。
instanceof 返回 true,若是對象是對象類型的實例。

註釋:JS 類型轉換這一章完整描述了類型運算符。

JavaScript 位運算符

位運算符處理 32 位數。

該運算中的任何數值運算數都會被轉換爲 32 位的數。結果會被轉換回 JavaScript 數。

運算符 描述 例子 等同於 結果 十進制
& 5 & 1 0101 & 0001 0001 1
| 5 | 1 0101 | 0001 0101 5
~ ~ 5 ~0101 1010 10
^ 異或 5 ^ 1 0101 ^ 0001 0100 4
<< 零填充左位移 5 << 1 0101 << 1 1010 10
>> 有符號右位移 5 >> 1 0101 >> 1 0010 2
>>> 零填充右位移 5 >>> 1 0101 >>> 1 0010 2

上例使用 4 位無符號的例子。可是 JavaScript 使用 32 位有符號數。

所以,在 JavaScript 中,~ 5 不會返回 10,而是返回 -6。

~00000000000000000000000000000101 將返回 11111111111111111111111111111010。

註釋:咱們將在 JS 位運算這一章爲您詳解位運算符。

 

9.關於NaN的說法正確的是

A  NaN的數據類型爲數字類型 也就是 typeof(NaN)的結果爲number
B  NaN == NaN 返回true
NaN不等於任何數,包括本身自己,NaN == NaN 返回false
D  若是已知變量num不是數字,那麼num == NaN 將獲得true
 
正確答案:  A,C
解析:

NaN指not a number,可是typeof(NaN)返回值倒是「number」,因此他是數字類型,A正確

Boolean(NaN)返回值爲false,B錯誤

NaN與任何值進行運算,都獲得NaN,C正確

NaN不能用關係運算符跟任意值比較都返回false,判斷一個數是否爲NaN需使用全局函數isNaN(),D錯誤

 

什麼是 NaN
在 MDN 的 NaN 文章中有描述:

全局屬性 NaN 表示 Not-A-Number 的值。
NaN 是一個全局對象的屬性。
NaN 屬性的初始值就是 NaN,和 Number.NaN 的值同樣。
在 ES5 中, NaN 屬性是一個不可配置(non-configurable),不可寫(non-writable)的屬性。但在 ES3 中,這個屬性的值是能夠被更改的,可是也應該避免覆蓋。
一般都是在計算失敗時,做爲 Math 的某個方法的返回值出現的(例如:Math.sqrt(-1))或者嘗試將一個字符串解析成數字但失敗了的時候(例如:parseInt("blabla"))。
NaN 的類型
typeof NaN // "number"
也就是說 NaN 是一種特殊的 Number 類型值。

何時會返回 NaN
JavaScript 權威指南 中『3.1.3 JavaScript 中的算數運算』章節裏有描述:

無窮大除以無窮大、給任意負數作開方運算 或者 算數運算符與不是數字或沒法轉換爲數字的操做數一塊兒使用時都將返回 NaN。

可分開解釋爲如下等狀況:

無窮大除以無窮大
給任意負數作開方運算
算數運算符與不是數字或沒法轉換爲數字的操做數一塊兒使用
字符串解析成數字
如下結果都是 NaN:

Infinity / Infinity; // 無窮大除以無窮大
Math.sqrt(-1); // 給任意負數作開方運算
'a' - 1; // 算數運算符與不是數字或沒法轉換爲數字的操做數一塊兒使用
'a' * 1;
'a' / 1;
parseInt('a'); // 字符串解析成數字
parseFloat('a');
這裏的『沒法轉換爲數字的操做』又是什麼鬼?

先看下面能夠轉換爲數字的操做例子:

Math.sqrt('4'); // 2
2 * '2'; // 4
'4' / 2; // 2
沒法轉換爲數字的操做
這裏涉及到 JavaScript 的 類型轉換 的概念。

JavaScript 權威指南 『3.8 類型轉換』章節有描述:

若是 JavaScript 指望使用一個數字,它把給定的值將轉換爲數字(若是轉換結果無心義的話將返回 NaN)。

可使用 Number() 方法作顯式類型轉換,舉例:

Number('1'); // 1
Number(null); // 0
Number('a'); // NaN
也可使用一元運算符 + 作隱式轉換,舉例:

+'1'; // 1
+null; // 0
+'a'; // NaN
也可使用全局函數 parseInt() 和 parseFloat() 解析整數和浮點數,舉例:

parseInt('12'); // 12
parseInt('12a'); // 12
parseInt('a12'); // NaN
parseInt(null); // NaN
parseInt() 和 parseFloat() 能夠簡單理解爲:

儘量解析更多數值字符,而且忽略後面的內容;若是第一個非空格字符是非數字,則會返回 NaN

須要注意的是 Number() 和 parseInt()``parseFloat() ,對某些輸入值的處理不一樣,如 null。

非數字類型轉換 爲 數字類型,以下表彙總:

值                                                數字
undefined                                    NaN
null                                                 0
true                                                 1
false                                               0
"" (空字符串)                                  0
"1.2" (非空,數字)                          1.2
"one" (非空,非數字)                  NaN
[] (任意對象)                                      0
[9] (一個數字元素)                           9
['a'] (其餘數組)                                  NaN
function(){} (任意函數)                     NaN
如何判斷 NaN
首先全局的 isNaN() 函數不能嚴格判斷輸入值是否爲 NaN。

isNaN() 的怪異行爲
在 MDN 的 isNaN() 文章中對 非數值參數 所表現的『怪異行爲』有解釋:

它會先嚐試將這個參數轉換爲數值,而後纔會對轉換後的結果是不是 NaN 進行判斷。

所以,對於能被強制轉換爲有效的非 NaN 數值來講,返回 false 值也許會讓人感受莫名其妙。

以下例子:

isNaN('37'); // false: 能夠被轉換成數值 37
isNaN(''); // false: 空字符串被轉換成 0
嚴格判斷 NaN
參考 MDN 中 Number.isNaN() 的 Polyfill 代碼: typeof value === 'number' && isNaN(value);

10.下面聲明變量及賦值的寫法正確的有

A  var  _myName = 12a
B  var  _myName = "12a"
C  var  myName = 12
D   var  $myName = true
 
正確答案:  B,C,D
解析:

A選項 12a是字符串,不是純數字,字符串要用引號

 

1、聲明變量
使用關鍵字:let、const、var來聲明變量。

const:用於聲明常量。
var: 定義的變量的時候,若沒有初始化,不報錯,會輸出undefined。其值以後能夠修改。
let:(ES6新增)塊級做用域 。在塊級{}裏面用let定義的變量,離開當前的塊{}以後,就不能使用(有點像局部變量,但做用域不同)。
注意:

const 定義變量不能夠修改,必須同時初始化;
var 定義的變量能夠修改,若不初始化會輸出undefined,不報錯;
var 全局聲明的變量會自動添加爲window對象的屬性,let不會;
let {…}一對花括弧就是一個特定的代碼塊,包括直接的{},流程語句的{},函數的{},…。函數聲明時自己就帶有{},也是屬於一個代碼塊;
不使用任何關鍵字聲明,直接給變量賦值不會報錯(一種特殊寫法),但僅僅在有值時不會報錯。
<script>
a=1;
console.log(a);//1
</script>

如圖:

 

<script>
a;
console.log(a);
</script>

如圖:

 

 


2、變量賦值
1. 先聲明,後賦值 ;
<script>
var a;
console.log(a);//undefined,不會報錯
a=1;
console.log(a);//1
</script>

2. 聲明的同時進行賦值;
<script>
var a=1;
console.log(a);//1
</script>

3. 一次性聲明多個變量;
<script>
var a,b,c;
console.log(a,b,c);//undefined undefined undefined
a=b=c=1;
console.log(a,b,c);//1 1 1
a=1;
b=2;
c=3;
console.log(a,b,c);//1 2 3
</script>

4. 一次性聲明多個變量同時賦值。
<script>
var a=1,b=2,c=3;
console.log(a,b,c);//1 2 3
</script>

3、聲明覆蓋的問題
變量值是能夠從新賦值的,常量不能夠;
var 是能夠從新聲明的,let 、 const不能夠;
4、變量命名的規範
1. 變量命名嚴格區分大小寫
e.g.:下面變量name,Name在JS中被視爲徹底不一樣的變量名稱

<script>
var name = 'name';
var Name;
console.log(name,Name);//name undefined
</script>
2. 開始必須是字母or下劃線or$符號,後續可跟字母,數字,下劃線,$符號
3. 不能使用 關鍵字 和 保留字 做爲變量名
關鍵字(keyword):即程序中已經開始使用的字符。是一些被JS賦予含義和功能的單詞,是js語言的自己的一部分。e.g. window,var,let……

保留字(Reserved Word):保留字是語言中定義過的字,儘管保留字在JavaScript中尚未特定的用途,但它們頗有肯能在未來被用做關鍵字。使用者不能將這些字做爲變量名或過程名使用。e.g. int,short……

注:
可是,可使用關鍵字/保留字做爲變量名稱的一部分,e.g. someString……

4. 變量的命名必定要有實際意義5. 命名不得包含空格6. 除下劃線之外,變量名稱中不能使用任何類型的任何標點符號7. JS中的命名習慣駝峯命名法:適用於長單詞e.g. getElementByClassName、getData首字母大寫e.g. Date()、Object()

相關文章
相關標籤/搜索