变量类型和计算

题目(答案见每题下方空白处)

  1.JS中使用typeof可以得到哪些类型

  number、string、boolean、undefined、object、function

  2.何时使用===,何时使用==

  一般除了obj.a == null里建议用==(否则需要写obj.a === null || obj.a === undefined,节约代码量,jQuery原码这么写的),其他建议用===

  3.JS中的内置函数有哪些

  这里指的是ECMAScript中的函数,包括Object、Array、Function、Boolean、Number、String、Date、RegExp、Error

  4.JS变量按照存储方式分为哪些类型,描述其特点

  基本类型和引用类型

  基本类型中的每个值都放在内存中(栈内存),复制时复制的为值

  引用类型中的每个值放在堆内存中,变量中保存的只是这个值的一个地址,复制的时候复制的为地址

  5.如何理解JSON

  JSON也是JS中的一个内置对象,只不过其书写上的格式比较严格,有两个API:stringify(对象->字符串)和parse(字符串->对象)

  但另一方面来说,JSON也是一个数据格式

 

知识点

变量类型

基本类型和引用类型

  基本类型有stringnumberbooleanundefinednull,保存在栈内存

  用变量来给另一个变量赋值时,变量得到的是,因此两个变量值发生变化时,另一个变量的值不变

  而引用类型有arrayobjectfunction,保存在堆内存

  用变量给另一个变量赋值时,实际上得到的是这个引用类型的一个地址,因此当其中一个变量值发生变化时,另一个变量的值也变化

 

  可以理解成基本类型的值(数据量,直接放在内存中比较好,而引用类型数据量大,放在内存中不利于内存的使用,节约内存空间

typeof运算符

  对象、数组正则表达式null返回object,函数返回function,数字返回number,字符串返回string,布尔值返回boolean,undefined返回undefined

  所以对于基本类型,typeof区分比较好,但是对于引用类型,用instanceof比较好(是否为某个的实例)

万能方法

  instanceof实际上判断的是数据对象是否为某个数据类型构造函数实例,如果用'123' instanceof String,返回的也是false

  这里可以用Object原型上的toString方法来判断,也就是Object.prototype.toString.call(),输出的是一个数组,内容为Object 数据类型,所有的数据类型在判断的时候都没有问题

扩展——symbol类型

  ES6中新增了Symbol类型,用typeof返回symbol

  这里的symbol类型每次都生成一个不一样的独立的值,也就是用===符号判断两个Symbol类型是永远不可能相等

  可以在构造Symbol实例的时候向其中传入一个字符串,查看该值的时候会以symbol(字符串)的形式返回,有利于我们区分不同的Symbol类型

  可以用在对象中,以防止对象的键值对被修改,但实际开发中还几乎没有用symbol类型的

 

变量计算

强制类型转换

  发生在以下几种情况中

  1. 字符串拼接(字符串+数字)
  2. ==运算符
  3. if语句
  4. 逻辑运算

   其中会被强制转换成false的有:0NaN"undefinednullfalse本身

 

JSON

  JSON也是JS中的一个内置对象(注意和内置函数区别,Math也是一个内置对象,内置函数是可以用new关键词构造实例的),只不过其书写上的格式比较严格

  JSON有两个API:stringify(对象->字符串)和parse(字符串->对象)

  但另一方面来说,JSON也是一个数据格式

posted @ 2019-09-19 21:52  且听风吟720  阅读(238)  评论(0编辑  收藏  举报