本系列面试题旨在学会相关知识点,从而轻松应对面试题的各种形式,本文讲解了 JavaScript 中的一些常见面试题。
感觉有帮助的小伙伴请点赞👍鼓励一下 ~
JavaScript属于什么类型的语言?JavaScript有多少种数据类型?- 什么是值类型和引用类型?分别有哪些?
- 什么是虚值和真值?分别有哪些?
&&和||运算符能做什么?
JavaScript属于什么类型的语言?
- 使用之前就需要确认其变量类型的称为 静态语言;
- 在运行过程中需要检查数据类型的语言称为 动态语言;
- 支持隐式类型转换的语言称为 弱类型语言,反之为 强类型语言。
JavaScript属于 动态语言,弱类型语言。
JavaScript有多少种数据类型?
八种,分别为 :
- Number
- String
- Boolean
- undefined
- null
- Object
- Bigint
- Symbol
我们经常使用的的类型如:array,function 都属于复杂数据类型 Object。
什么是值类型和引用类型?
存储位置
值类型的变量会保存在 栈内存 中,如果在一个函数中声明一个值类型的变量,那么这个变量当函数执行结束之后会 自动销毁。
引用类型的变量名会保存在 栈内存 中,但是变量值会存储在 堆内存 中,引用类型的变量不会自动销毁,当没有引用变量引用它时,系统的 垃圾回收机制 会回收它。
赋值方式
值类型的变量直接赋值就是深赋值,修改 b 的值不会影响 a。
function foo() {
let a = 1
let b = a
a = 2
console.log(a); //=> 2
console.log(b); //=> 1
}
foo()
引用类型的变量直接赋值实际上是传递引用,只是浅赋值,修改值会影响所有引用该地址的变量。
function foo() {
let c = {
name: 'warlber'
}
let d = c
d.name = '一尾流莺'
console.log(c.name); //=> 一尾流莺
console.log(d.name); //=> 一尾流莺
}
foo()
添加属性和方法
值类型无法添加属性和方法。
function foo() {
let a = 1
a.name = 'warbler'
console.log(a.name); //=> undefined
}
foo()
引用类型可以添加属性和方法。
function foo() {
let a = {}
a.name = '一尾流莺'
console.log(a.name); //=> 一尾流莺
}
foo()
值类型和引用类型分别有哪些?
基本的值类型有: undefined,Boolean,Number,String,Symbol。
引用类型有: Object。
特殊的引用类型:null,指针指向空地址。
特殊的引用类型:function,不用于储存数据,所以没有复制,拷贝函数一说。
什么是虚值和真值?分别有哪些?
简单的来说 虚值 就是 在转换为布尔值时 变为 false 的值,变为 true 的值则为 真值 。
如何检查值是否虚值?使用 Boolean 函数或者 !! 运算符。
虚值(Falsy)
- 长度为 0 的字符串
- 数字 0
falseundefinednullNaN
真值(Truthy)
- 空数组
- 空对象
- 其他
&& 和 || 运算符能做什么?
&& 也可以叫 逻辑与, 它采用短路来防止不必要的工作。
- 在其操作数中找到第一个虚值表达式并返回它,如果没有找到任何虚值表达式,则返回最后一个真值表达式。
- 所有操作数的条件都为
true时,结果才为true; - 如果有一个为
false,结果就为false; - 当第一个条件为
false时,就不再判断后面的条件。
console.log(false && 1 && []); // false
console.log(" " && true && 5); // 5
使用if语句
if(value){
console.log(value)
}
使用&&操作符
value && console.log(value)
|| 也叫或逻辑或,这也使用了短路来防止不必要的工作。
- 在其操作数中找到第一个真值表达式并返回它;
- 只要有一个条件为
true时,结果就为true; - 当两个条件都为
false时,结果才为false; - 当一个条件为
true时,后面的条件不再判断; - 在支持
ES6默认函数参数之前,它用于初始化函数中的默认参数值。
console.log(null || 1 || undefined); // 1
function logName(name) {
var n = name || "Mark";
console.log(n);
}
logName(); // "Mark"
logName('hzw'); // "hzw"
逻辑与的优先级是高于逻辑或的
比如 console.log(3||2&&5||0),会先算 2 && 5 的值为 5,然后再 3||5----3,最后再 3||0----3,所以最终结果为 3。
表达式a && 表达式b
计算表达式 a(也可以是函数)的运算结果,如果为 True, 执行表达式 b(或函数),并返回 b 的结果; 如果为 False,返回 a 的结果。
表达式a || 表达式b
计算表达式 a(也可以是函数)的运算结果,如果为 Fasle, 执行表达式 b(或函数),并返回 b 的结果;如果为 True,返回 a 的结果。