博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【JS面试】第二章 变量类型和计算
阅读量:4946 次
发布时间:2019-06-11

本文共 2795 字,大约阅读时间需要 9 分钟。

  1. JS中使用typeof能得到的哪些类型
  2. 何时使用===何时使用==
  3. JS中有哪些内置函数
  4. JS变量按照存储方式区分为哪些类型,并描述其特点
  5. 如何理解JSON

1 变量类型

值类型 VS 引用类型

值类型:

  • 数据之间是值类型的:number、string、boolean、null、undefined
  • 把每一个值存放在对应变量内存的位置,数据分块存放在内存中,数据之间不会相互影响
var a = 100;var b = a;a = 200;console.log(b); //100

引用类型

  • 数据是引用类型的:对象、数组、函数(object、array、function)
  • 把a赋值成一个对象,这个对象存在另一个地方,a内存的位置通过指针指向这个对象的地方,把b赋值成a时,其实是定义了一个b,b的指针又指向对象的位置,变量实际上是1个真实对象的指针
  • 好几个变量共用1个内存块,节省内存空间,赋值只是变量指针的赋值,并不是每次赋值都把对象真正的值复制一份,所以值的修改相互干预
  • 产生原因:若a赋值成一个对象,特别大,a再赋值给b,b也会占很大的空间,不合理,所以引用类型是为了让内存共用空间
  • 运行过程:执行完1、2行代码后,age = 20这个对象是1份不是2份,只不过a和b同时指向了这个对象,第3行b.age = 21时,对象的值改成了21,a也指向这个对象,所以a.age也是21
  • 特点:无限制扩展属性,比如说对象有个age属性,可以加第2个属性name属性
var a = {
age:20};var b = a;b.age = 21;conlose.log(a.age) //21

typeof运算符详解

  • typeof可以识别6种数据类型(识别出来的结果):undefined、string、number、boolean、object、function
  • typeof null -> object,null是一个特殊的对象,它是1个空的指针,定义了1个位置,但未指向任何一个引用类型的1个真实的对象,但是类型仍是object
  • typeof运算符:只能区分值类型的详细类型,引用类型无法细分
  • 引用类型只能区分出function,除了function,其它的引用类型是区分不出来了。因为函数是一个十分特殊的引用类型,在js中函数的地位非常高,所以需要在任何地方轻松判断出这个是函数,所以typeof单独把函数列出来
// 前4种都可以识别出来,因为都是值类型typeof undefined //undefinedtypeof 'abc' //stringtypeof 123 //numbertypeof true //boolean// 后4种无能为力,识别出来只能是object/function,因为是引用类型typeof {
} //objecttypeof [] //objecttypeof null //objecttypeof console.log //function

2 变量计算

  • 针对值类型,需要强制类型转换
  • 针对引用类型,需要API支持,是一种功能类型的计算,并不是变量本身发生变化的计算,只是更改对象内部属性

针对值类型的强制类型转换原则:

  • string数据会转换number数据
  • number会转换成true
  • 0、’’、null、undefined会转换成false
  • 慎用=====无类型转换

==运算符

null == undefined;  //true100 == '100';  //true0 = '';  //true

字符串拼接

  • 此处特殊,number会转化成string,其余string会转化成number
var a = 100 + 10;  //110var b = 100 + '10';  //'10010'

if语句

  • 此处特殊,为false的情况:0、’’、null、undefined、NaN、false
var a = trueif(a) {
...}var b = 100if(b) {
...}var c=''if(c) {
...}

逻辑运算与或非(&&、||、!)

console.log(10 && 0);  //0console.log(''||'abc');  //'abc'console.log(!window.abc);  //true// 判断1个变量会被当做true还是false的方法var a = 100;console.log(!!a);  //true

3 题目解答

  1. JS中使用typeof能得到的哪些类型

typeof可以识别6种数据类型:number、string、boolean、object、function、undefined

  1. 何时使用===何时使用==

使用jQuery源码中推荐的写法,当obj.a为null或undefined时,看一个对象的属性是否存在或看一个函数的参数是否存在,但对象和形参必须定义,否则会报错,可简写使用==,除此外一律用===

// 看一个对象的属性是否存在if(obj.a == null) {
// 相当于obj.a === null || obj.a ===undefined,简写形式}// 看一个函数的参数是否存在function(a, b) {
if(a == null) {
...}}
  1. JS中有哪些内置函数(数据封装类对象)

都是函数

  • Number、String、Boolean、ObjectArrayFunction、Date、RegExp、Error(一定要大写)

内置对象

  • Math、JSON
  1. JS变量按照存储方式区分为哪些类型,并描述其特点

值类型:数据分块存放在内存中,数据不会相互干涉

var a = 100;var b = a;a = 200;console.log(b); //100

引用类型:好几个变量共用1个内存块,节省内存空间,赋值只是变量指针的赋值,并不是真正值的拷贝,所以值的修改相互干预

var a = {
age:20};var b = a;b.age = 21;conlose.log(a.age) //21
  1. 如何理解JSON如何理解JSON
  • json只不过是一个JS对象而已
  • json也是一种数据格式
  • math也是JS对象
JSON.stringify({
a:10,b:20}) //将对象转换为字符串JSON.parse('{"a":10,"b":20}') //将字符串变为对象

转载于:https://www.cnblogs.com/kxbk100/p/10583646.html

你可能感兴趣的文章
BUPT复试专题—众数(2014)
查看>>
20145316 《信息安全系统设计基础》第十四周学习总结
查看>>
Liferay7 BPM门户开发之18: 理解ServiceContext
查看>>
Intel Galileo development documentation
查看>>
EV: Workaround to Allow Only One Instance or Window of outlook
查看>>
数据校验,
查看>>
IntelliJ IDEA完美解决tomcat8+乱码问题
查看>>
破解电信光猫华为HG8120C关闭路由功能方法
查看>>
在Qt示例项目的C ++ / QML源中的//! [0]的含义是什么?
查看>>
【智能家居篇】wifi网络接入原理(上)——扫描Scanning
查看>>
操作引入xml文件的书包(定位到指定节点)
查看>>
操作系统学习笔记系列(一)- 导论
查看>>
CSS实例:图片导航块
查看>>
window的对象有哪些(笔记)
查看>>
Boolean Expressions
查看>>
They Are Everywhere
查看>>
数据结构--汉诺塔递归Java实现
查看>>
day14 多态与抽象
查看>>
Eclipse CDT 出现 launch failed Binary not found
查看>>
apache jmeter
查看>>