一、数据类型部分
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个经典题目,希望对你的工作和学习有所帮助。当然也可以关注我,和我一起学习,一起进步,一起分享你的经验。
欢迎关注同步微信公众号:前端小菜的进阶之路