本系列面试题旨在学会相关知识点,从而轻松应对面试题的各种形式,本文讲解了 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
false
undefined
null
NaN
真值(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
的结果。