JS 基础知识点

JS 基础

P1.

问题描述 continue 和 break 的区别
答: 首先,continuebreak 都是用来控制循环结构的;
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. 基本数据类型:numberstringbooleannullundefinedsymbol(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. 引用数据类型:functionobject
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 的值
posted @ 2019-09-04 16:23  KLDN_如初  阅读(225)  评论(0)    收藏  举报