一、数据类型部分
1、JavaScript有哪些数据类型?
JavaScript是一种弱类型的脚本语言,它有两类数据类型:基本类型与对象类型
基本类型:String、Number、Boolean、undefined、null
对象类型:Object、Array、function等
2、判断数据类型的方式有几种?
有三种基本的判断方式:typeof、===、instanceof
方式 可以判断 无法判断 typeof String、Number、Boolean、undefined、function null与Object、Object与Array instanceof 判断对象的具体类型,返回boolean值 30 === undefined、null 30
具体示例请参见文章:JavaScript基础—数据类型
3、undefined与null的区别
undefined:表示未定义
null:表示定义了未赋值,通常用来表示这个变量在将来会保存对象类型的数据
undefined与null作为判断条件的时候,结果都是false
4、== 与 ===的区别
==:称为“相等”,如果两个操作数不是同一类型,那么相等运算符会尝试一些类型转换,然后进行比较;
===:称为“严格相等”,表示恒等,首先比较两边的变量数据类型是否相等,其次比较两边的变量的数值是否相等
这里提到了一个概念“类型转换”,将在下一篇文章中进行介绍,下面请先根据前面的概念理解一下表达式
null == undefined; // true
null === undefined; // false
1 == '1'; // true
1 == '01.0' // true
1 === '1'; //false
以上是数据类型的一些经典的面试题,你是否都掌握了呢。下面我们来举一反三,留两个相关的练习题:
-
使用typeof bar ===“object”来确定bar是否是一个对象时有什么潜在的缺陷?这个陷阱如何避免?
-
自己写一个获取变量具体数据类型的方法,要求如下
// 判断类型的方法
function getDataType(ac_data){
//……
return 'xxx'; // xxx是具体的类型
}
getDataType('1') // string
getDataType(1) // number
getDataType(true) // boolean
getDataType(undefined) // undefined
getDataType([1,2,3]) // array
getDataType(function(){}) // function
二、赋值与内存部分
1、var a = xxx,a内存中到底保存的是什么
根据xxx的情况而定
xxx是基本类型数据,保存的就是这个数据
xxx是对象类型的数据,保存的就是这个对象数据的地址值
xxx是一个变量,保存的是这个变量的内存内容
2、引用变量赋值的问题
var obj1 = {name:'神奇的小提莫',age:1}
var obj2 = obj1;
obj1.name = '前端小菜的进阶之路';
//obj2.name数据什么,又是为什么呢
console.log(obj2.name); //?
obj1 = {name:'我是小提莫的小蘑菇',age:0};
//obj1.name和obj2.name数据分别又是什么,为什么呢?
console.log(obj2.name); //?
console.log(obj1.name); //?
两个引用变量指向同一个对象,通过一个引用变量修改对象内部数据,另一个引用变量也看得见
两个引用变量指向同一个对象,让一个引用变量指向另一个对象,另一个引用变量还是指向原来的对象
具体示例请参见文章:JavaScript基础—内存空间
3、数据传递:在JavaScript中调用函数时,传递变量参数时,是值传递还是引用传递?
var a = 3;
function fn(a){
a=a+1
}
fn(a)
console.log(a); //?
var b = {name:'神奇的小提莫',age:28};
function fn2(b){
b.name = 'fn2'
}
fn2(b)
console.log(b.name); //?
控制台依次输出:3, fn2
理解1:只有值传递, 没有引用传递, 传递的都是变量的值, 只是这个值可能是基本数据, 也可能是地址(引用)数据,这种理解可以参见内存空间文章
理解1:如果后一种看成是引用传递, 那就值传递(传递的是基本数据)和引用传递(传递的是地址值)都可以有
4、JS引擎如何管理内存
内存生命周期:分配内存空间 ——> 存储数据,进行操作 ——> 释放对应内存
释放内存:
为执行函数分配的栈空间内存: 函数执行完自动释放
存储对象的堆空间内存: 当内存没有引用指向时, 对象成为垃圾对象, 垃圾回收器后面就会回收释放此内存,通常给保存引用对象的变量赋值为null,那么这个对象就没有了变量引用(指向它),自然就被回收了
以上是关于的JavaScript基础—数据类型和JavaScript基础—内存空间的8个经典题目,希望对你的工作和学习有所帮助。当然也可以关注我,和我一起学习,一起进步,一起分享你的经验。
欢迎关注同步微信公众号:前端小菜的进阶之路