JavaScript中的相等判断
话题: JavaScript 难度: ⭐
JavaScript中的相等判断有严格判断和带隐式转换的判断两种:
- 严格判断(strict comparision): 比如
===
,比较的时候不会隐式转换类型; - 抽象判断(abstract comparasion):比如
==
,比较的时候会隐式转换类型。
var a = "42";
var b = 42;a == b; // true
a === b; // false
复制代码
一些简单的规则:
- 如果两边都是布尔类型的值,使用
===
; - 如果两边是0,
""
,[]
,使用===
; - 所有其它类型,使用
==
是安全的。而且在很多情况下会简化代码、增加可读性。
请解释Null和Undefined
话题: JavaScript 难度: ⭐⭐
JavaScript和TypeScript有两个最基本的类型null
和undefined
。它们的含义是不同的:
- 如果还没有被初始化,则是
undefined
; - 如果不可用,则可以用
null
来表示;
请解释JavaScript中的值和类型
话题: JavaScript 难度: ⭐⭐
下面是JavaScript内置的可用类型:
- string
- number
- boolean
- null和undefined
- object
- symbol (ES6的新语法)
如果比较JavaScript中的两个对象?
话题: JavaScript 难度: ⭐⭐
两个非基本类型的值,比如对象(包括函数和数组)都是通过引用的形式来访问。如果直接通过==
和===
来判断,那么只会简单的判断其引用地址是否相同,而不是它们实际对应的值。
如果数组和字符串做比较,那么数组会通过逗号拼接转换为字符串。通过等号判断的时候,两个相同的数组不会相等,但是和相同数据的字符串比较反而相等。
var a = [1,2,3];
var b = [1,2,3];
var c = "1,2,3";a == c; // true
b == c; // true
a == b; // false
复制代码
如果要深度比较,可以使用第三方库,比如deep-equal
或则你自己实现一个比较算法。
请解释undefined
和not defined
的区别
话题: JavaScript 难度: ⭐⭐⭐
在JavaScript中,如果你尝试使用不存在的还未申明的变量,JavaScript会抛出错误var name is not defined
。但是如果你用typeof
来查看其类型,会返回undefined
。
我们先来澄清一下声明和定义的区别:var x
是一个声明,因为你并没有定义其具体的值,你只是声明其存在性。
var x; // declaring x
console.log(x); //output: undefined
复制代码
var x = 1
同时兼具声明和定义,我们也可以叫它初始化。在JavaScript中,每一个变量和函数声明都会被提升到顶部。
如果我们访问一个声明了但是未定义的变量,会返回undefined
。
var x; // Declaration
if(typeof x === 'undefined') // Will return true
复制代码
访问一个未声明未定义的变量,会返回not defined错误。
console.log(y); // Output: ReferenceError: y is not defined
参考自https://juejin.im/post/5bd95d22e51d45685f442f73