🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] # 题1、什么是全局变量?什么是局部变量? 答: 局部变量: 定义在函数内的变量,只能在函数中使用,并且只有在调用函数时存在,函数执行完之后变量就销毁了(流星一样,一划就没了)。 全局变量: 定义在函数外的变量,在所有地方都可以使用,并且变量的值一直存在(像恒星一样,一直存在)。 # 题2、定义变量可以使用 let 和 var ,那它们有什么区别? 答: var 1. 能定义全局变量和局部变量 2. 可以重复定义变量 3. 变量提升(先使用变量,后定义) let 1. 能定义全局变量、局部变量、块级变量(大括号之内的变量) 2. 不能重复定义一个变量 3. 不能变量提升(必须先定义,再使用) ~~~ var name = 'tom' var name = 'jack'   // 可以 ​ let age = 10 let age = 20     // 报错!!重复定义了 ​ // let 定义块级作用域:只能在 for 循环中使用 for(let i=0; i<10; i++) { ​ } console.log( i )  // 报错!! ​ // var 定义的是全局变量(函数外) for(var i=0; i<10; i++) { ​ } console.log( i )  // 11 ~~~ # 题3、break 是干什么用的?continue 是干什么用的? 答: break: 退出循环(出循环) continue: 结束本次循环,进入下一次循环(还在循环内) ~~~ // break 的用法 for (let i = 0; i < 3; i++) {    if (i == 1) break   // 退出循环    console.log(i); // 输出结果: 0 } ​ // continue 的用别 for (let i = 0; i < 3; i++) {    if (i == 1) continue   // 结束本次循环,进入下一次循环    console.log(i); // 输出结果: 0 2 } ~~~ # 题4、 switch ... case 是干什么用的? 答: 多向分支,当分支多的时候性能比if ... else更好,类似于 if ...else if ... else if ... else if... ~~~ // switch ... case 的用法 var day; // getDay() 方法返回 0 至 6 的数字周名 switch (new Date().getDay()) {    case 0:        day = "星期天";        break;    case 1:        day = "星期一";        break;    case 2:        day = "星期二";        break;    case 3:        day = "星期三";        break;    case 4:        day = "星期四";        break;    case 5:        day = "星期五";        break;    case 6:        day = "星期六";        break; } console.log(day);   // 当前星期 ​ ~~~ 注意:每个条件中需要添加 break 退出 switch,如果不添加 break 会直接执行下面的 case 直到遇到 break; default 关键词规定不存在 case 匹配时所运行的代码; ~~~ let day  = 1 switch(day) {    case 1:     // 匹配        console.log('星期一')    // <-- 这里没加 break 所以会向下执行下一个 case    case 2:        console.log('星期二')        break  // .....    case 7:        console.log('星期日')        break    default:  // 如果前面的条件都不满足时执行        console.log('数字不是1~7')        break } ​ //最终输出结果是:星期一 星期二 ~~~ # 题5、return 是干什么用的? 答: 只能用在函数中。 用途: 1. 退出函数 2. 在退出的时候可以把函数中的数据返回到调用它的地方 ~~~ // return 的用法 function abc() {    let a = 10    let b = 20    return a + b   // 退出函数并返回 a+ b 的值 } console.log(abc())   // 30 ​ // 如果函数中没有 return 那么函数的返回值是 undefined: function abc() {    let a = 10    let b = 20    a + b   // 退出函数并返回 a+ b 的值 } console.log(abc())   // undefined ~~~ # 题6、arguments 是干什么用的? 答: 1. 只能用在函数中 2. 它是一个数组 3. 代表调用函数时传的参数 ~~~ // arguments 用法 function abc() {    console.log(typeof arguments);  // object    console.log(arguments)  // [Arguments] { '0': 'tom', '1': 10, '2': 'hi' }    console.log(arguments.length)   // 3    // 可以使用索引确定单个参数的类型    console.log(typeof arguments[0]);   // string } abc('tom', 10, 'hi') ~~~ # 题7、在函数中,如何知道调用这个函数时一共传了几个参数? 答: 在函数中使用 `arguments.length` 。 ~~~ function abc() {    console.log(arguments.length) } ​ abc(1,2,3,4,6,7)   // 6 abc('hello')        // 1 ~~~ # 题8、 JS 中如何获取一个随机数? 答: 使用 `Math.random` 可以得到一个\[0~1)之间的随机数(包含0,不包含1) # 题9、如何获取当前时间? 答: 当前时间:`new Date()` 。 当前时间戳:`Date.now()` ;得到的是毫秒为单位的秒数。 时间戳: 从 1970年1月1日0时0分0秒 这个时间点到现在所经历的秒数。 # 题10、如何把一个变量强制类型转换成数字? 答: 使用 `Number` 或 `+` 。 parseInt:转整数 parseFloat: 转小数 ~~~ // 把一个变量强制类型转换成数字 let a = '013' let b = Number(a)   // 13 let c = +a;     // 13 console.log(c); ~~~ # 题11、NaN 是什么? 答: Not a Number (不是一个数字) 。一些不合理的数学运算时会得到 NaN。 ~~~ // NaN let a = 'abc' let b = Number(a)   // NaN   abc 转完之后不是一个数字 console.log('abc' - 1234)   // NaN ~~~ # 题12、当我们进行小数运算时,经常会得到不精确的值,这时怎么办? 答: 使用 `toFixed` 指定要精确到的小数位。 ~~~ // 做小数运算精确 console.log(0.34 + 0.48);   // 0.8200000000000001 ​ // 解决方法: 使用 toFixed 明确小数位 (0.34 + 0.48).toFixed(2)   // 0.82 ~~~