1.题目

  • 1.JS使用typeof能得到哪些类型
  • === 和 == 的选择
  • JS中有哪些内置函数
  • JS变量按存储方式分为哪些类型,并描述其特点
  • 如何理解JSON

2.知识点

2.1 值类型和引用类型

值类型(boolean,string,number,null,undefined)

var a = 10;
var b = a;
a = 20;
console.log(b); //10

引用类型(对象,数组,函数)

var a = {x:10}
var b = a;
a.x = 20;
console.log(b); //20

值类型直接把值存储在堆中,把a赋值给b在内存中是又给b开辟了一块新的空间,存储了同样的值。

引用类型分两块存储,先在堆中存储一个实际的值,再在栈中存储一个堆中值的引用地址,指向堆中的对象。把a赋值给b是在栈中重新开辟一块空间存储的还是相同对象的引用地址,a和b存储的地址相同,指向的对象也相同。当对象值发生改变时,两者会同时改变。

引用类型的值一般都比较大,采用此种存储方式可以节省内存空间。

2.2 typeof运算符

typeof 'abc' //string
typeof 123  //number
typeof true  //boolean
typeof undefined  //undefined
typeof null  //object
typeof {a:10}  //object
typeof [1,2,3]  //object
typeof console.log()  //function

2.3 类型转换

强类型转换:通过String(),Number(),Boolean(),parseInt()函数强制转换

可能发生隐式类型转换的场景

  • 字符串拼接
  • 使用==
  • if语句
  • 逻辑循环

一、首先看双等号前后有没有NaN,如果存在NaN,一律返回false。

二、再看双等号前后有没有布尔,有布尔就将布尔转换为数字。(false是0,true是1)

三、接着看双等号前后有没有字符串, 有三种情况:

1、对方是对象,对象使用toString()或者valueOf()进行转换;
2、对方是数字,字符串转数字;(前面已经举例)
3、对方是字符串,直接比较;
4、其他返回false
四、如果是数字,对方是对象,对象取valueOf()或者toString()进行比较, 其他一律返回false

五、null, undefined不会进行类型转换, 但它们俩相等

上面的转换顺序一定要牢记,面试的时候,经常会出现类型的问题。

'100'==100  //转换成字符串
''==0  //转换成false
undefined == null; // true
1 == true; // true
2 == true; // false
0 == false; // true
0 == ' '; // true
NaN == NaN; // false
[] == false; // true
[] == ![]; // true
//在if中转换成false的:
null
undefined
''
NaN
0
false
10 && 0  //0  10转换成true
'' || 'abc' //abc   ''转换成false
!window.abc  //true    

2.4 null和undefined的区别

null:是被赋值过的对象,刻意把一个对象赋值为null,故意表示其为空,不应有值,所以对象为null是正常的,typeof null 返回 'object' ,null可以转换为0

undefined 表示“缺少值”,即此处应有一个值,但还没有定义;转为数值时为NaN(非数字值的特殊值) typeof undefined 返回 'undefined'

3.题目解答

3.1 JS使用typeof能得到哪些类型

typeof 'abc' //string
typeof 123  //number
typeof true  //boolean
typeof undefined  //undefined
typeof null  //object
typeof {a:10}  //object
typeof [1,2,3]  //object
typeof console.log()  //function

3.2 === 和 == 的选择

jquery源码中的写法:

除了以下方式其他全部使用 ===

if(obj.a == null){//相当于 obj.a === undefined || obj.a === null
}

3.3 JS中有哪些内置函数

单纯作为语言来说,不考虑node和浏览器web

  • Object
  • Array
  • Boolean
  • Number
  • String
  • Function
  • Date
  • RegExp
  • Error

内置对象:Math,JSON

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

值类型何引用类型

3.5 如何理解JSON

JSON是JS中的一个内置对象

区别

  • JS对象 {x:10}
  • JSON对象 {'x':10}
  • JSON串 "{'x':10}"
//将JS对象转换成json串
JSON.stringify({x:10});
//将json字符串转换成json对象
JSON.parse("{'x':10}");

3.6 严格模式

目的

消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为;
 
消除代码运行的一些不安全之处,保证代码运行的安全;

提高编译器效率,增加运行速度;

为未来新版本的Javascript做好铺垫。

特性

  "use strict";

可以选择放在一个函数中或自定义作用域中。

禁止this指向全局对象

  function f(){return !this;} // 返回false,因为"this"指向全局对象,"!this"就是falsefunction f(){ "use strict";return !this;} // 返回true,因为严格模式下,this的值为undefined,所以"!this"为true。

创设eval作用域

正常模式下,Javascript语言有两种变量作用域(scope):全局作用域和函数作用域。严格模式创设了第三种作用域:eval作用域。
正常模式下,eval语句的作用域,取决于它处于全局作用域,还是处于函数作用域。严格模式下,eval语句本身就是一个作用域,不再能够生成全局变量了,它所生成的变量只能用于eval内部。

  "use strict";var x = 2;console.info(eval("var x = 5; x")); // 5console.info(x); // 2

全局变量显式声明

 v = 1; // 报错,v未声明for(i = 0; i < 2; i++) { // 报错,i未声明}

禁止删除变量

严格模式下无法删除变量。只有configurable设置为true的对象属性,才能被删除。

  "use strict";var x;delete x; // 语法错误var o = Object.create(null, {'x': {value: 1,configurable: true}});delete o.x; // 删除成功

函数不能有重名的参数

保留字

为了向将来Javascript的新版本过渡,严格模式新增了一些保留字:implements, interface, let, package, private, protected, public, static, yield。
使用这些词作为变量名将会报错。

  function package(protected) { // 语法错误"use strict";var implements; // 语法错误}

3.7 eval

1.没有必须使用的应用场景

2.不容易调试,可读性不好

3.在旧的浏览器中如果你使用了eval,性能会下降10倍。

4.容易xss

【前端面试】变量和类型计算相关推荐

  1. python——变量的类型、不同类型变量的计算、变量的输入以及格式化输出

    变量的类型 在 python 中定义变量是不需要指定类型(在其他很多高级语言中都需要) 数据类型可以分为数字型.非数字型 数字型:整型(int).浮点型(float). 布尔型(bool): 真 Tr ...

  2. 类的设计与实现1、设计一个图形抽象类Graph,该类中有成员变量图形类型(type),维度信息(dimension,二维或三维);成员方法计算面积(computeArea); 2、设计一个接口

    类的设计与实现 1.设计一个图形抽象类Graph,该类中有成员变量图形类型(type),维度信息(dimension,二维或三维):成员方法计算面积(computeArea); 2.设计一个接口IDi ...

  3. 前端:JS/17/前篇总结(JS程序的基本语法,变量),数据类型-变量的类型(数值型,字符型,布尔型,未定义型,空型),数据类型转换,typeof()判断数据类型,从字符串提取整数或浮点数的函数

    JS程序的基本语法 1,JS是区分大小写的,如:Name和name是不同的: 2,JS中每一条语句,一般以英文的分号(;)结束,在Java中是严格地一定要加上分号,不然会报错:但在JavaScript ...

  4. 校招社招必备核心前端面试问题与详细解答

    本文总结了前端老司机经常问题的一些问题并结合个人总结给出了比较详尽的答案.网易阿里腾讯校招社招必备知识点. 原理讲解参考:前端增长-重新定义大前端 在线课程:网易云课堂课程      思否课堂 官方博 ...

  5. 【前端面试分享】- 寒冬求职下篇

    前言 越来越多的公司都在面试前加入了笔试环节. 有的甚至会根据你的笔试答题情况来决定是否进入面试环节. 当然,进入面试环节,也会时不时的出几道算法或者其他类型的相关的题目让你写出来. 所以不仅要会说, ...

  6. 【干货分享】前端面试知识点锦集02(CSS篇)——附答案

    二.CSS部分 1.解释一下CSS的盒子模型? 回答一: a.标准的css盒子模型:宽度=内容的宽度+边框的宽度+加上内边具的宽度 b.网页设计中常听的属性名:内容(content).填充(paddi ...

  7. 【干货分享】前端面试知识点锦集03(JavaScript篇)——附答案

    三.JavaScript部分 1.谈谈你对Ajax的理解?(概念.特点.作用) AJAX全称为"Asynchronous JavaScript And XML"(异步JavaScr ...

  8. 前端面试技巧和注意事项_前端面试百分之九十九过的技巧

    2020最全的前端面试指南,一个多月 1.8w 字的面试经验积累,凭借它最终成功入职大厂-- 今年的金三银四刚好赶上疫情,很多大公司都停止招聘甚至裁员,想跳槽的小伙伴被打的措手不及. 需求减少要求肯定 ...

  9. 前端面试:你应该了解的JS算法相关的知识

    前端面试:你应该了解的JS算法相关的知识 时间复杂度 通常使用最差的时间复杂度来衡量一个算法的好坏. 常数时间 O(1) 代表这个操作和数据量没关系,是一个固定时间的操作,比如说四则运算. 对于一个算 ...

  10. 2020前端面试(一面面试题)

    2020前端面试(一面面试题) ​ CSS方面 calc, support, media各自的含义及用法? @support主要是用于检测浏览器是否支持CSS的某个属性,其实就是条件判断,如果支持某个 ...

最新文章

  1. linux的共享内存,linux共享内存实际在哪里?
  2. java搭载服务_Java入门及环境搭载
  3. ios数组基本用法和排序
  4. python网络爬虫实战 吕文翔_实战Python网络爬虫
  5. JDK中的Atomic包中的类及使用
  6. 为什么要将对象序列化
  7. 保护 ASP.NET Web 部件页面
  8. linux7 ntp log,RH254小结(九)rhel7新的ntp对时服务Chrony
  9. Dubbo xml配置 和注解配置 写法
  10. C++设计模式-单例模式理论与实例
  11. 0间隔24h采集线报+源码的资源网
  12. 【Arcpy】Python in ArcGIS
  13. Go黑魔法之cgo reflect访问list存储C指针
  14. python设计棋牌游戏
  15. win10计算机本地组策略编辑器,win10本地组策略编辑器打不开最佳解决方法
  16. GIS招聘 | 甘肃、海南、辽宁、内蒙古地震局
  17. 从单体式架构迁移到微服务架构,简述java程序的运行原理
  18. redis链接不上,报保护模式
  19. Spring boot 文件下载乱码问题
  20. jsoncpp写法更新

热门文章

  1. Android Dialog的简单说明
  2. 2,000,000+在用的这款Chrome插件,到底有多牛逼?
  3. Android View框架总结(六)View布局流程之Draw过程
  4. linux csi 摄像头,A20 linux(dragonboard)同时使用Parallel CSI Camera及UVC
  5. antd tree节点添加删除按钮_MySQL索引原理及BTree(B/+Tree)结构详解
  6. python-图书管理系统5-全部代码
  7. npm,yarn对比
  8. 图档生成bin文件_「嵌入式笔记」hex文件、bin文件、axf文件的区别?
  9. ad20如何画出pcb板大小_PCB板过孔对高频信号传输的影响,一定要重视
  10. python进程与线程_Python 进程和线程