JS 基础知识点
JS 基础
P1.
| 问题描述 | continue 和 break 的区别 |
|---|---|
| 答: | 首先,continue 和 break 都是用来控制循环结构的; 1. continue:单单跳过本次循环,继续执行下一次循环; 2. break:终止整个循环,跳出循环体执行循环语句后面的语句; |
P2.
| 问题描述 | i++ 和 ++i 的区别 |
|---|---|
| 答: | i++:先使用 i 的值,再对 i 的值进行 加 1 操作; ++i:先对 i 的值进行 加 1 操作,再使用 i 的值; 示例:var n = 5; var num = n++ + ++n + n; 求 num 的值? 答案:num = 19; 解题思路: 1. var n = 5; 2. var num = n++ + ++n + n; 该式子等同于下面的式子 3. var num = n++; num = num + ++n; num = num + n; 4. var num = 5; n = 6; 5. num = 5 + 7 = 12; n = 7; 6. num = 12 + 7 = 19; n = 7; |
P3.
| 问题描述 | Javascript 的数据类型 |
|---|---|
| 答: | 1. 基本数据类型(原始数据类型):数值(Number)、字符串(String)、布尔(Boolean)、空(Null)、未定义(Undefined)、代表(Symbol:ES6 新添加的类型) 2. 引用数据类型:对象(Object) |
P4.
| 问题描述 | 什么是自调用函数?为什么要使用自调用函数? |
|---|---|
| 答: | 1. 自调用函数又称:立即执行函数 - (funtion(){ // 函数体 })() 2. 目的: ○ 不必为函数命名,避免变量的全局污染 ○ 创建了一个局部作用域,可以封装局部变量 |
P5.
| 问题描述 | slice、splice 和 split 的区别 |
|---|---|
| 答: | 1. slice(数组) ○ arr.slice(start, end):从 arr 数组的 start 位置开始截取到 end-1 位置;如果只提供 start 的值,表示从 start 位置截取到数组末尾;返回一个新的数组;不修改原数组; · var arr = [1, 2, 3]; · **var newArr = arr.slice(1, 2); ** · console.log(newArr); // [2] · newArr = arr.slice(1); · console.log(newArr); // [2, 3] · console.log(arr); // [1, 2, 3] 2. slice(字符串) ○ str.slice(start, end):从 str 字符串的 start 位置开始截取到 end-1 位置;如果只提供 start 的值,表示从 start 位置截取到字符串末尾;返回一个新的字符串;不修改原字符串; · var arr = "Hello slice"; · **var newArr = arr.slice(0, 5); ** · console.log(newArr); // "Hello" · console.log(arr); // "Hello slice" 3. splice(数组) ○ arr.splice(start, deleteNumbers, item1, item2...):从 arr 数组的 start 位置开始删除,一共删除 deleteNumbers 个元素;如果只提供 start 的值,表示从 start 位置删除到数组末尾;如果提供了 item1... 则从 start 位置开始添加;返回被删除的元素组成的数组;删除直接在原数组上操作; · var arr = [1, 2, 3]; · **var newArr = arr.splice(1, 1, 4, 5); ** · console.log(newArr); // [2] · console.log(arr); // [1, 4, 5, 3] · var arr = [1, 2, 3]; · **var newArr = arr.splice(1, 1); ** · console.log(newArr); // [2] · console.log(arr); // [1, 3] · var arr = [1, 2, 3]; · **var newArr = arr.splice(1); ** · console.log(newArr); // [2, 3] · console.log(arr); // [1] 4. split(字符串) ○ str.split(separator, partNumbers):将 str 字符串根据 separator 分隔符来分隔成一个个的片段;提供 partNumbers 可以选择要返回几份片段;返回由片段组成的字符数组;不修改原数组; · var str = "love"; · var newStr = str.split(""); · console.log(newStr); // ["l", "o", "v", "e"] · console.log(str); // "love" · var str = "l-o-v-e"; · var newStr = str.split("-"); · console.log(newStr); // ["l", "o", "v", "e"] · **console.log(str); // "l-o-v-e" **· var newStr = str.split("-", 2); · console.log(newStr); // ["l", "o"] · console.log(str); // "l-o-v-e" |
P6.
| 问题描述 | typeof( typeof() ) 返回的类型 |
|---|---|
| 答: | 1. 基本数据类型:number,string,boolean,null,undefined,symbol(ES6 新增的数据类型) ○ var num = 1; typeof num; // "number" ○ var str = "hello typeof"; typeof str; // "string" ○ var toggle = true; typeof toggle; // "boolean" ○ var obj = null; typeof obj; // "object" ○ var und; typeof und; // "undefined" ○ var sym = Symbol(); typeof sym; // "symbol" 2. 引用数据类型:function,object ○ var func = function(){}; typeof func; // "function" ○ var obj = {}; typeof obj; // "object" ○ var arr = [1, 2, 3]; typeof arr; // "object" |
P7.
| 问题描述 | 取得 1 ~ 11 之间的随机整数(包括 1 但不包括 11) |
|---|---|
| 答: | 1. Math.floor(Math.random() * 10 + 1); - Math.floor():向下取整 2. parseInt(Math.random() * 10 + 1); |
P8.
| 问题描述 | 变量提升 和 函数提升 |
|---|---|
| 答: | 首先,Javascript 是一种解释执行脚本语言,JS 中代码执行分两步:预解析 和 执行; 在 预解析 阶段,JS 解析器 会将当前作用域内的所有 var 声明的变量 和 function 声明的函数提前到当前作用域的最顶端,但是变量的赋值还是停留在定义的位置。 一句话概括变量提升:var 声明的变量,可以在声明之前使用,值为 undefined; 一句话概括函数提升:function 声明(函数声明)的函数,可以在声明之前使用,整个函数提升至当前作用域的最顶端 1. 变量提升 ○ 示例: · console.log(str); // undefined · var str = "hello var" · console.log(str); // "hello var" ○ 解析: · var str; // 变量提升 · console.log(str); // undefined · str = "hello var" · console.log(str); // "hello var" 2. 函数提升 ○ 示例: · func(); // "hello function" · console.log(func); // function func() { console.log("hello function"); } · function func() { console.log("hello function"); } · func(); // "hello function" ○ 解析: · var func = function func() { console.log("hello function"); } // 函数提升 · func(); // "hello function" · console.log(func); // function func() { console.log("hello function"); } · func(); // "hello function" 3. 如果 函数声明 和 变量声明 使用的是同一个变量名称,函数声明 的优先级 高于 变量声明 的优先级 ○ 示例: · console.log(func); // function func() { console.log("hello statement"); } · function func() { console.log("hello statement"); } · var func = "hello "; · console.log(func); // hello ○ 解析: · var func = function func() { console.log("hello statement"); } // 函数提升 · console.log(func); // function func() { console.log("hello statement"); } · func = "hello "; · console.log(func); // hello |
P9.
| 问题描述 | 数组中 push(),pop(),shift() 和 unshift() 的区别 |
|---|---|
| 答: | 数组模拟栈的方法:push(param1 ...) 和 pop() - 作用于数组末尾 数组模拟队列的方法:shift() 和 unshift(param1 ...) - 作用于数组开头 1. push():可接收多个参数;添加到数组末尾;返回修改后数组的长度 - length; · var arr = [1, 2, 3]; · var len = arr.push(4, 5); · console.log(len); // 5 · console.log(arr); // [1, 2, 3, 4, 5] 2. pop():不接收参数;从数组末尾移除最后一项;返回移除的项的值 - item; · var arr = [1, 2, 3]; · var item = arr.pop(); · console.log(item); // 3 · console.log(arr); // [1, 2] 3. shift():不接收参数;从数组开头移除第一项;返回移除的项的值 - item; · var arr = [1, 2, 3]; · var item = arr.shitf(); · console.log(item); // 1 · console.log(arr); // [2, 3] 4. unshift():可接收多个参数;添加到数组开头;返回修改后数组的长度 - length; · var arr = [1, 2, 3]; · var len = arr.unshift(4, 5); · console.log(len); // 5 · console.log(arr); // [4, 5, 1, 2, 3] |
P10.
| 问题描述 | 列举 强制类型转换 和 隐式类型转换 |
|---|---|
| 答: | 1. 强制类型转换: ○ Number(),parseInt(),parseFloat() ○ String(),toString() ○ Boolean() 2.隐式类型转换: ○ isNaN() ○ ++,--,+,-,,/,% ○ !,&&,|| ○ <,>,<=,>=,==,!=* |
P11.
| 问题描述 | 函数声明 和 函数表达式 |
|---|---|
| 答: | 1. 相同点:都可以创建一个函数 2. 不同点: ○ 函数声明存在 函数提升 · func(); // "hello function" · console.log(func); // function func() { console.log("hello function"); } · function func() { console.log("hello function"); } ○ 解析: · function func() { console.log("hello function"); } // 函数提升 · func(); // "hello function" · console.log(func); // function func() { console.log("hello function"); } ○ 函数表达式只存在 变量提升,不存在 函数提升 · console.log(func); // undefined · var func = function { console.log("hello function"); } ○ 解析: · var func; // 变量提升 · console.log(func); // undefined · func = function { console.log("hello function"); } |
P12.
| 问题描述 | 指出 Javascript 宿主对象 和 原生对象 和 内置对象 的区别 |
|---|---|
| 答: | 1. 原生对象(又称:内部对象、本地对象) ○ 独立于宿主环境,在 W3C 规范中制定的 ECMAScript 语言的对象(引用类型) ○ 在运行过程中动态创建的对象,需要 new 实例化的对象 · Object,Function,Array,String,Boolean,Number,Date,RegExp,Error ... 2. 宿主对象 ○ 由 ECMAScript 实现的宿主环境提供的对象 · 如果宿主是浏览器,浏览器中的顶级对象就是宿主对象 - window,document · 如果宿主是 Node.js 环境,Node.js 中的顶级对象就是宿主对象 - global 3. 内置对象 ○ 独立于宿主对象,在 JS 引擎初始化阶段就被创建好的对象 ○ 不需要 new 实例化的对象 · Global(全局对象),Math |
P14.
| 问题描述 | 列举日期(Date)相关函数 |
|---|---|
| 答: | 1. getYear():获取年份,但不完整;不推荐 2. getFullYear():获取完整年份 3. getMonth():获取月份 ○ 返回值:0-11 对应 1-12 月 4. getDate():获取天数 5. getDay():获取星期 ○ 返回值:0-6 对应 星期天-星期六 6. getHours():获取小时 7. getMinutes():获取分钟 8. getSeconds():获取秒数 9. getMilliseconds():获取毫秒数 10. getTime():获取此刻距离计算机元年的毫秒数 11. setYear(number):设置年份,但不完整;不推荐 12. setFullYear(number):设置完整年份 13. setMonth(number):设置月份 14. setDate():设置天数 星期不可设置 15. setHours():设置小时 16. setMinutes():设置分钟 17. setSeconds():设置秒数 18. setMilliseconds():设置毫秒数 19. setTime():设置此刻距离计算机元年的毫秒数 |
P15.
| 问题描述 | null 和 undefined 的区别 |
|---|---|
| 答: | 1. null:空对象类型 ○ null 是访问一个不存在的对象时返回的值,即空的对象 2. undefined:未定义类型 ○ undefined 是访问一个未初始化的变量时返回的值 |
P16.
| 问题描述 | == 和 === 的区别 |
|---|---|
| 答: | 1. ==:相等 ○ 在进行比较时,先检查两端数据的数据类型是否相等 · 如果相等,再进行值比较 · 如果不相等,先对两端进行隐式转换成相等的数据类型,再进行值比较 2. ===:严格等于 ○ 在进行比较时,先检查两端数据的数据类型是否相等 · 如果不相等,就一定不相等,不支持隐式转换 · 如果相等,再进行值比较 |
P17.
| 问题描述 | setTimeout() 和 setInterval() 的区别 |
|---|---|
| 答: | 首先,两个函数都是创建一个定时器 1. setTimeout():在指定的毫秒数后执行一次指定的函数或代码段 2. setInterval():以指定的毫秒数为时间间隔重复调用指定的函数或代码段 |
P18.
| 问题描述 | 程序中捕获异常的方法 |
|---|---|
| 答: | 1. try{ // 可能出错的代码段 } catch(e) { // 出错后的处理 } 2.try{ // 可能出错的代码段 } catch(e) { // 出错后的处理 } finally { // 无论出不出错,都会执行的语句 } |
P19.
| 问题描述 | split() 和 join() 的区别 |
|---|---|
| 答: | 1. str.split(separator, partNumbers):将 str 字符串根据 separator 分隔符来分隔成一个个的片段;返回由片段组成的字符数组;不修改原数组; 2. arr.join(separator):将 arr 数组根据 separator 分隔符连接成一个字符串;返回连接后的字符串 |
P20.
| 问题描述 | 解释:foo = foo || bar |
|---|---|
| 答: | 1. 上述表达式会出现 逻辑短路 现象 ○ 如果 || 左边的表达式为真,则 foo 最终的值就为 左边表达式 的值 ○ || 右边的表达式不会再执行 2. 常用于函数中对于传入的参数的控制 ○ 如果 foo 参数有实参值传入,则 foo 参数的值为传入的实参值 ○ 如果没有传入对应的实参值,则 foo 参数的值默认为 bar 的值 |

浙公网安备 33010602011771号