一、JS基础
包括js基本概念,数据类型,类型检测,逻辑和比较运算。
1.以下不属于 typeof 运算符返回值的是?
A. "string"
B. "function"
C. "object"
D. "null"
答案:D
题解:typeof 运算符返回变量或表达式的类型字符串,对一个值使用typeof操作符可能返回下列某个字符串:“undefined”——值未定义;“boolean”——值是布尔类型;“string”——值是字符串;“number”——值是数字或NaN;“object”——值是对象或null;“function”——值是函数
2.执行以下代码,错误的输出结果是:
A. 输入:typeof {"x":1} 输出:"object"
B. 输入:typeof 1 输出:"number"
C. 输入:typeof [{x:1}] 输出:"array"
D. 输入:typeof NaN 输出:"number"
答案:C
题解:数组是对象类型
3.可以用typeof来判断的基本类型有:
A. undefined
B. null
C. array
D. object
答案:A
题解:
JavaScript的数据类型:
基本类型:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol。
引用数据类型:对象(Object)、数组(Array)、函数(Function)。
4.以下不属于JavaScript基本数据类型的是:
A. Boolean
B. undefined
C. Symbol
D. Array
答案:D
5.以下关于JavaScript中数据类型的说法错误的是:
A. 数据类型分为基本数据类型和引用数据类型
B. JavaScript一共有8种数据类型
C. Object是引用数据类型,且只存储于堆(heap)中
D. BigInt是可以表示任意精度整数的基本数据类型,存储于栈(stack)中
答案:C
题解:
基本数据类型直接存储在栈(stack)中的简单数据段,占据空间小、大小固定,属于被频繁使用数据,所以放入栈中存储。
引用数据类型同时保存在栈内存和堆内存中。引用数据类型存储在堆(heap)中的对象,占据空间大、大小不固定,如果存储在栈中,将会影响程序运行的性能;引用数据类型在栈中存储了指针,该指针指向堆中该实体的起始地址。当解释器寻找引用值时,会首先检索其在栈中的地址,取得地址后从堆中获得实体。
6.请选择结果为ture的表达式
A. null instanceof Object
B. null === undefined
C. null == undefined
D. NaN == NaN
答案:C
题解:
A:null表示为空的引用;instanceof 表示某个变量是否是某个对象的实例 ;虽然null的类型是object,但是null不具有任何对象的特性,即不能执行null.toString()、null.constructor等对象实例的默认调用。
D:NaN表示的是非数字, 但是这个非数字也是不同的,因此,NaN 不等于 NaN,并且两个NaN永远不可能相等。
7.下列代码结果为 true 的是
A. Symbol.for('a') === Symbol.for('a')
B. Symbol('a') === Symbol('a')
C. NaN === NaN
D. {} === {}
答案:A
题解:
B:Symbol
.
for()与Symbol()这两种写法,都会生成新的 Symbol。它们的区别是,前者会被登记在全局环境中供搜索,后者不会。Symbol.
for()不会每次调用就返回一个新的 Symbol 类型的值,而是会先检查给定的key是否已经存在,如果不存在才会新建一个值。比如,如果你调用Symbol.
for("cat")30 次,每次都会返回同一个 Symbol 值,但是调用Symbol("cat")30 次,会返回 30 个不同的 Symbol 值。D:当我们需要访问引用数据类型 (对象 / 数组 / 函数) 的值时,首先从栈中获得该对象的地址指针,然后再从堆内存中取得所需的数据。
{}实际保存的是指向堆内存中对象的一个指针,而另一个{}保存的是指向堆内存中另一个对象的一个指针;虽然这两个对象的值是一样的,但它们是独立的2个对象,占了2份内存空间;所以{}==={}为 false。
8.根据如下变量,下列表达式中返回值为true的是
var a = 1;
var b = [];
var c = '';
var d = true;
A. (a || b) === true
B. (b && c) === true
C. (c && d) === true
D. (d || a) === true
答案:D
题解:
JS中的||符号运算方法:
只要“||”前面为false,不管“||”后面是true还是false,都返回“||”后面的值。
只要“||”前面为true,不管“||”后面是true还是false,都返回“||”前面的值。
总结:真前假后
JS中的&&符号运算方法:
只要“&&”前面是false,无论“&&”后面是true还是false,结果都将返“&&”前面的值;
只要“&&”前面是true,无论“&&”后面是true还是false,结果都将返“&&”后面的值;
总结:假前真后
在js逻辑运算中,0、“ ”、null、false、undefined、NaN都会判为false,其他都为true。
9. 1==true的返回值是true,这句话是否正确?
A. T
B. F
答案:A
题解:
如果有一个操作数是布尔值,先将其转换为数值再比较——false为0,而true为1
如果一个操作数是字符串,另一个操作数是数值,先将字符串转换为数值再比较
10.下面代码输出为true的是
A. console.log([] === []);
B. console.log(undefined == 0);
C. console.log(undefined == false);
D. console.log(false == '');
答案:D
题解:
布尔值和数字或字符串进行比较时,两边都转成数字再比较。
0, ' ', false 这三者进行值比较都是相等的,undefinde, null 除与自身相比外,与其他任何类型值进行比较都是不等的
11.浏览器环境下,以下打印结果为true的是
A. console.log("12" === 12)
B. console.log (NaN === NaN)
C. console.log (typeof(null) === typeof(window))
D. console.log ([1,2,3] === [1,2,3])
答案:A
12.以下表达式,正确的是
A. Number('a') == Number('a')
B. -1 == true
C. 3 + '2' === 5
D. ![] == ''
答案:D
题解:
如果有一方为字符串,就会认为是字符串拼接,结果为字符串
"!"为逻辑非,在操作非布尔值类型的数据时,会先将数据转换为布尔值然后再取反
为了使自己对基础的记忆加深和有效复习,对每道题考察的知识进行整理,希望也对你有所帮助😊