# javascript 基础测试

## 单选题
1. javascript 代码需要放置在______标签之间
   A.scripe
   B.javascript
   C.script
   D.scripte

   答案 A
   
   解析  js代码需要放置在script标签之间才能被识别
   
2. script 标签可以被放置的位置是   
    A.<!doctype>文档声明之后就可以
    B.boby标签内部
    C.html标签结束之后
    D.head标签内部

    答案  D

    解析  script标签可以放置在 head标签内或者是 body 标签内部

    （B选项是boby标签）

3. 下面哪种javascript引入方式是错误的
    A.在.html文件中的body标签中创建script 标签  在script 标签中写 js代码
    B.在.js文件中写js代码， 在.html通过 ``` <link src="js文件路径"> ```
    C.在html 标签内执行js语句 如:``` <button onclick="alert()">save</button> ```
    D.在.html文件内 在head标签中创建script 标签  在script 标签中写 js代码

答案  B

解析  link标签是用来引入外部css文件的

1. 下面两段代码，js文件的加载顺序
   demo1:

   ```
    <script async src="js/vendor/jquery.js"></script>
    <script async src="js/script2.js"></script>
    <script async src="js/script3.js"></script>
   
   ```
    demo2:

    ```
    <script defer src="js/vendor/jquery.js"></script>
    <script defer src="js/script2.js"></script>
    <script defer src="js/script3.js"></script>
   
    ```
    A.demo1的顺序为：jquery.js, script2,script3
      demo2的顺序为：script2.js, script3.js, jquery
    B.demo1的顺序为：script2.js,script3.js,jquery.js
      demo2的顺序为：script3.js,script2.js，jquery.js
    C.demo1的顺序为：只执行script2
      demo2的顺序是  jquery.js, script2.js, script3.js

    D.demo1的顺序是：script3.js,script2.js,jquery.js
      demo2的执行顺序是：script3.js script2.js jquery,js

   答案：C

   解析 引入js时 script标签中加入async后，js文件的执行顺序不确定  。但是 如果js代码报错，就会造成阻塞 即后面的js代码不执行 所以 demo1 除了jquery.js, script2.js, script3.js 这个顺序之外  其他顺序会因为报错只执行第一个

   引入script标签中加入 defer后，js文件执行顺序确定为 文件引入的顺序
   
   defer属性只支持外部引入的方式
   
   
   
2. 下面哪一种js注释添加方式是正确的
    A. /
    B.//
    C.\
    D.*

    答案 B
    
    解析 js单行注释 符号是//   js多行注释符号是 /*  */
    
    
    
3. console.log()在chrome运行的结果会打印在哪里
    A. 页面上
    B.开发者工具中的sources中
    C.开发者工具中的xhr中
    D.开发者工具的console中

    答案 D  

    解析  console.log 会打印在chrome浏览器的console板块中

    

4. 下面哪种JavaScript输出数据方式的表述是错的：

    A.使用 window.alert() 弹出带输入框的警告框。
    B.使用 document.write() 方法将内容写到 HTML 文档中。
    C.使用 innerHTML 写入到 HTML 元素。
    D.使用 console.log() 写入到浏览器的控制台。

    答案： A

    解析 alert 弹出的警告框不包含 输入框

5. 下面哪个关键字能声明js变量
    A.def
    B.var
    C.数据类型+变量名=变量值
    D.变量不需要声明 直接写变量名就行

    答案 B

6. 下面哪个不是js关键字
    A.abstract
    B.let
    C.import
    D.absolute

    答案  D

    解析 absolute是css的绝对定位

    

7. 下面哪个变量名符合要求
    A.shop1
    B.public
    C.point&
    D.12SY

    答案 A
    解析：  


    名称可包含字母、数字、下划线和美元符号
    名称必须以字母开头
    名称也可以 $ 和 _ 开头（但是在本教程中我们不会这么做）
    名称对大小写敏感（y 和 Y 是不同的变量）
    保留字（比如 JavaScript 的关键词）无法用作变量名称

8. 阅读下面代码 选择运行结果
    code :
  ```
  var person = "bilibili    ";
  var person1="干杯!";
  console.log(person,person1)

  ```
   A. bilibili 干杯!
   B. bilibili干杯!
   C.bilibili,干杯
   D.person,person1

答案 D
解析:person person1是变量会被解析，中间的','只是分割 不会按，显示 字符串中的空格会被保留




9. 将 "025.5" 的string类型变量转化为 number 类型后 值是
    A.0255
    B.255
    C.25.5
    D.5.5

答案 D
解析 字符串转成数字 从第一个不是0的数字开始算

10.  1 + ‘1aa’ 的运算结果是
    A.11aa
    B.2
    C.2aa
    D.1aa
    答案 A
    解析 +操作的两边是字符串时 充当连接符的作用

11.  0 || 3 || 3 的返回结果是 
      A.0
      B.3
      C.true
      D.1
      答案 B
      解析 || 运算符返回第一个不为0（false）的值
12.  1 && 0 && 5 的返回结果是 
      A.0
      B.1
      C.true
      D.5
      答案  B
      解析  &&运算符 返回第一个为true(1)的值

<hr>
13.  下面代码进行了几步操作 分别是什么操作
    code:
    ```
    var x = 15;
    ```
  A. 1 定义值为15的变量x
  B. 2  定义一个变量x;  把15作为值赋给x 
  C. 3 var声明； 名字是x;  值=15
  D. 4 var声明； 名字是x;  值=； 15
  答案 B


14. 读代码选结果
    code:
    ```
    var a=3
    var b=0
    var sum=a+b
    console.log(sum)
    console.log(sum+"")
    console.log(a+b+"")
    
    ```
    A.3,30,30
    B.30,30,3O
    C.3,3,30
    D.30,30,30

答案 C
解析：在数字类型后面+"" 的时候，就把整个输出的内容变成了字符串类型  不做数字运算直接拼接 此时+做连接符

15. 读代码 选结果
    code 
    ```
    var a=9
    var b=1
    console.log(--a)
    console.log(a--)
    conosle.log(b--)

    ```
    A. 8,8,1
    B.8,7,0
    C.9,1,1
    D.8,8,报错

答案 D  
解析 --a 前置自减,先减再执行； a--后置自减  先执行再减

16. typeOf 10+''的结果是
    A. String
    B. Number
    C. undefined
    D.null
答案  B 
解析  数字+字符串的时候  中间的+充当连接符的操作
17. var a=2  a>3&&a<5 的结果为
    A. true
    B.false
    C.2
    D.3
答案  B
18. 定义函数的关键字是
    A.def
    B.函数
    C.function
    D.func

答案 C
19. 下面定义的函数结构错误的是
    A.function a(){}
    B.var b=function(){}
    C.()=>{}
    D.functian a(){}
答案 D

<hr>

20. 读代码 选执行结果
  code
  ```
    add(a,b){
        return a+b
    }
    add(1,2)
  ```
  A. 3   B. 12  C.a+b  D. 空，什么都不出
答案: D
解析： 函数add返回的值没有接收

21. 函数 function greet(){console.log("hello)} 的返回值是
 A. hello  B.空 什么也没有  
 C. undefined  D. null
答案 C

22. 读代码 选执行结果
  code
  ```
    myfunc(x,y=1){
        console.log(x*y)
    }
    myfunc(3)
  ```
A. 3  B.x*y  c.NaN  D.  报错
答案 A

23. 读代码 选执行结果
  code
  ```
    myfunc(x=1,y){
        console.log(x*y)
    }
    myfunc( ,3)
  ```
A. 3  B.x*y  c.NaN  D.  报错
答案 D
解析 js在定义函数时，需要把必传的参数写在前面 

24. 读代码 选执行结果
    ```
     function a(n) {
            if (n <= 1) {
                return 1
            } else {
                return n * a(n - 1)
            }
        }
        console.log(a(5))

        var cheng=a
        a=null
        console.log(cheng(5))

    ```

    A. 报错 B.30 C. 60 D.120
    答案 A

25. 读代码 选执行结果
 ```
 function fn()  
{  
    this.user = '追梦子'; 
    var obj={user:"momo"}
    return {};  
}
var a = new fn;  
console.log(a.user);
 ```
 A. 追梦子 B. momo C.undefined D. 报错答案：C

26. 读代码 选执行结果
 ```
 function myFunction() {
    var carName = "Volvo";
}
console.log(caName)
 ```
 A.Volvo B.caName C.undefined D.报错

 答案 D


## 填空题
1. 什么是字面量  常见的字面量有__  , __ , __ , __ , __ , __
   
   答案：字面量（literal）用于表达源代码中一个固定值的表示法（notation）
   字符串自变量  整数字面量  浮点数字面量 布尔字面量  数组字面量  对象字面量

2. 运算符的优先级
   答案 [],.,{},  ++,-- ,  *, /,%,  +,-, <,<=,>,>=  ==,!=,===,!==,  && , ||, ?:,
    =、+=、-=、*=、/=、%=、&=、|=、^=、<、<=、>、>=、>>= ,
3. js基本数据类型和引用数据类型的区别是__________
  答案 基本数据类型（存放在栈中）
    基本数据类型是指存放在栈中的简单数据段，数据大小确定，内存空间大小可以分配，它们是直接按值存放的，所以可以直接按值访问
    引用数据类型（存放在堆内存中的对象，每个空间大小不一样，要根据情况进行特定的配置）
    引用类型是存放在堆内存中的对象，变量其实是保存的在栈内存中的一个指针（保存的是堆内存中的引用地址），这个指针指向堆内存。
    引用类型数据在栈内存中保存的实际上是对象在堆内存中的引用地址。通过这个引用地址可以快速查找到保存中堆内存中的对象


4. 外部引入js文件的优势是
    答案：（1）可维护性：遍及不同HTML页面的javascript会造成维护问题，但把所有js文件都放在一个文件夹中维护起来就轻松多了。而且开发人员因为也能够在不触及HTML标记的情况下集中精力编写js代码
    （2）可缓存：浏览器能够根据具体的设置缓存链接的所有外部js文件，也就是说，如果有2个页面都使用同一个文件，那么这个文件只需下载一次。因此，最终结果就是能够加快页面加载速度。
    （3）适应未来：通过外部文件包含js无需使用XHTML或hack注释。HTML和XHTML包含外部文件的语法是相同的。 

5. 在html中 javascript语句是由   "执行"的"指令"
   答案 浏览器
6. javascript语句由   ，   ，   ，   构成
   答案  ECMAScript  BOM  DOM
7.    分割javascript语句
   答案 ;
8. 阅读下面代码 写出运行结果
code :

```
typeof "John"         
typeof 3.14            
typeof NaN                   
typeof false                 
typeof [1,2,3,4]              
typeof {name:'John', age:34}  
typeof new Date()            
typeof function () {}        
typeof myCar                  //  (如果 myCar 没有声明)
typeof null     
```
答案：
```
 typeof "John"                 // 返回 string
typeof 3.14                   // 返回 number
typeof NaN                    // 返回 number
typeof false                  // 返回 boolean
typeof [1,2,3,4]              // 返回 object
typeof {name:'John', age:34}  // 返回 object
typeof new Date()             // 返回 object
typeof function () {}         // 返回 function
typeof myCar                  // 返回 undefined (如果 myCar 没有声明)
typeof null                   // 返回 object 

```
<hr>
9.  ```25%6*(10-4) ```执行结果为：
    
10.读代码分析预编译过程
```
// 函数
function fn(a){
        console.log(a);	 
	var a = 123;		
	console.log(a);		

	function a(){};		
	console.log(a);	

	var b = function(){};
	console.log(b);		
	 function d(){};
}

fn(1);
```



# 简答题
* 实现 fizzBuzz 函数，参数 num 与返回值的关系如下：
1、如果 num 能同时被 3 和 5 整除，返回字符串 fizzbuzz
2、如果 num 能被 3 整除，返回字符串 fizz
3、如果 num 能被 5 整除，返回字符串 buzz
4、如果参数为空或者不是 Number 类型，返回 false
5、其余情况，返回参数 num
 示例
 输入：15
 输出：fizzbuzz


 * 编写一个函数来验证输入的字符串是否是有效的 IPv4 地址。
如果是有效的 IPv4 地址，返回 "IPv4" ；
如果不是上述类型的 IP 地址，返回 "Neither" 。
IPv4 地址由十进制数和点来表示，每个地址包含 4 个十进制数，其范围为 0 - 255， 用(".")分割。比如，
172.16.254.1；


* 小易准备去魔法王国采购魔法神器,购买魔法神器需要使用魔法币,但是小易现在一枚魔法币都没有,
但是小易有两台魔法机器可以通过投入x(x可以为0)个魔法币产生更多的魔法币。
魔法机器1:如果投入x个魔法币,魔法机器会将其变为2x+1个魔法币
魔法机器2:如果投入x个魔法币,魔法机器会将其变为2x+2个魔法币
小易采购魔法神器总共需要n个魔法币,所以小易只能通过两台魔法机器产生恰好n个魔法币,小易需
要你帮他设计一个投入方案使他最后恰好拥有n个魔法币
输入描述：
输入包括一行,包括一个正整数n(1 ≤ n ≤ 10^9),表示小易需要的魔法币数量。
输出描述：
输出一个字符串,每个字符表示该次小易选取投入的魔法机器。其中只包含字符'1'和'2'。
比如输入10，返回122