JS面试题,是针对前端工程师面试时的一些知识点梳理,整篇会围绕题目、知识点、解答三个过程进行学习。本人也属于此次总结的学生,希望借此机会重新温习巩固基础知识。积硅步至千里,学习和应用就像搭积木一般,只有基础建好才能将积木搭得越高。
变量类型和计算
一、 题目
二、知识点
变量类型
值类型vs引用类型
typeof运算符详解
变量计算
强制类型转换
值类型
特点:每个变量都会存储各自的值,不会相互影响
var a = 100
var b = a
a = 200
console.log(b) //100
引用类型
特点:不同变量指针指向同一个对象 (引用类型包括数组、对象、函数)
var a = {age:20}
var b = a
b.age = 21
console.log(b.age) //21
tips: 引用类型有个特点,那就是可以无限的扩展属性
typeof运算符详解
typeof undefined // undefined
typeof 'abc' //string
typeof '123' //number
typeof true //boolean
typeof {} //object
typeof [] //object
typeof null //object
typeof console.log //function
tips: typeof只能区分值类型的详细类型、无法区分引用类型的详细类型、但可以区分出函数
变量计算—强制类型转换
//字符串拼接
var a = 100 + 10 // 110
var b = 100 + '10' // '10010'
//==运算符
100 == '100' // true (把数字100转化为字符串‘100’进行比较)
0 == '' // true (把数字0转化为false, 把空字符串转化为false 进行比较)
null == undefined // true (null、undefined转化为false相比)
//if语句
var a = true
if(a){
// 可以进入if语句
}
var b = 100
if(b){
// 可以进入if语句, b=100转化为了true
}
var c = ''
if(c){
// 无法进入if语句, 因为c=''转化为了false
}
//逻辑运算
console.log(10 && 0) //0
console.log('' || 'abc') //'abc'
console.log(!window.abc) //true
var a = 100
console.log(!!a) // true
三、解答
1.JS中使用typeof能得到那些类型
如果改题是笔试题,那么将上面typeof运算符详解的代码段写上是没有问题的,如果是面试题,我们必须还需要将其区分将清楚,typeof对于值类型的是可以区分它们的详细类型,而对于引用类型是无法区分详细类型,但可以区分出引用类型的函数function类型,其中typeof null 比较特殊,它的类型也是一个object
2.何时使用=== 何时使用==
==的情况,前面介绍知识点的时候已经解释过了,它们是会进行类型转换后再进行比较,而===是完全没有类型转换的,那么何时使用===,何时使用==呢?推荐参考jquery源码的写法,面试过程中可以拿出这个例子来解释、再深入你就直接流氓些说自己有代码洁癖,出了例子这种情况,别的都只用===
if(obj.a == null){
//这里想单于 obj.a === null || obj.a === undefined , 简写形式
//这是jquery源码的写法
//除了这种情况,别的一律使用 ===
}
3.JS中有哪些内置函数
Object
Array
Boolean
Number
String
Function
Date
RegExp
Error
tips: 内置函数就有这几种,如果被问到他们的作用,那么需要理解哥哥内置函数的方法,以后有时间我也会从新去整理总结一下
4.JS变量按存储区分为哪些类型,并描述其特点
//值类型
var a = 10
var b = a
a = 11
console.log(b) //10
//引用类型
var obj1 = {x:100}
var obj2 = obj1
obj1.x = 200
console.log(obj2.x) //200
存储方式前面已经解释过了,分为值类型和引用类型两种。 值类型把数值分块各自存储在一个变量类型中, 而引用类型好几个变量共用一个内存块,为了节省空间才这么做的。特点,值类型存储的变量的值相互不影响,而引用类型因指向同一个内存块,所以它们是相互影响的。
5.如何理解JSON
//JSON 只不过是一个 JS 对象而已
JSON.stringify({a:10,b:20})
JSON.parse('{"a":10,"b":20}')
JSON是JS的一个内置对象,前面提到了JS的内置函数,JSON并不属于函数范畴,它仅仅只是一个JS的对象,是一种数据格式,常用的方法只有两个,一个将对象转换为字符串,一个将字符串转换为对象。面试的时候应该回答的全面一些。