专栏首页较真的前端关于数据类型的前端面试题总结,不要被别人鄙视~

关于数据类型的前端面试题总结,不要被别人鄙视~

总结面试题不一定是为了准备面试,更是对于自己的一种温故知新,了解自己知识的熟练度和理解度

问题一栏

1.JavaScript中的数据类型都有哪些?

2.如何判断一个变量是否为数组?

3.undefined和null的相同与不同?

4.隐式类型转化的时候,JavaScript底层都做了哪些处理?

5.有哪些值转化成布尔型后为false?

6.讲讲ES6中的Symbol?

7.如何把字符串转换为数组?

8.如何把类数组变量转换为数组,如函数内部的arguments对象,selector返回的DOM列表。

问题解答

JavaScript中的数据类型都有哪些?

数据类型有两种:原始数据类型(又称基础数据类型、可变数据类型)和复杂数据类型(又称对象、不可变数据类型)。

原始数据类型包括:undefined,null,数字,字符串,布尔类型,Symbol(ES6 新加入的类型)

复杂数据类型包括:包括对象

其中对象包括:内部对象(Array、String等),宿主对象(window)和自定义对象。

如何判断一个变量是否为数组?

数据类型有两种:原始数据类型(又称基础数据类型、可变数据类型)和复杂数据类型(又称对象、不可变数据类型)。

原始数据类型包括:undefined,null,数字,字符串,布尔类型,Symbol(ES6 新加入的类型)

复杂数据类型包括:包括对象

其中对象包括:内部对象(Array、String等),宿主对象(window)和自定义对象。

undefined和null的相同与不同?

相同点

  1. 这两个数据类型都只有一个值
  2. 都没有方法
  3. 都表示“无”
  4. 转化为布尔类型时,都是false

不同点

  1. null是一个关键字,而undefined不是。
  2. null的实质是一个空的对象,而undefined是window的一个属性。
  3. 进行数字类型转换时,null返回0,undefined返回NaN

隐式类型转化的时候,JavaScript底层都做了哪些处理?

对象转成原始数据类型时,先调用对象的valueOf方法,如果返回结果不是原始数据类型的值,再调用toString方法。

原始类型转原始类型时,直接调用对应的构造函数进行转换,如Number('123'),String(true),Boolean(0)。

有哪些值转化成布尔型后为false?

包括下面这个六种

0、-0、undefined、null、空字符串、NaN

讲讲ES6中的Symbol?

Symbol是ES6中新加的一个原始类型,他的每个值都是唯一的,即使是用两个完全一样的变量构造出来的Symbol也不相等。

原始类型传入Symbol方法时,会进行转换成字符串 再转成Symbol类型值;如果是对象的话,会先调用改对象的toString方法再转成Symbol类型的值。

Symbol是最大的用处是用来消除“魔法字符串”的。

如何把字符串转换为数组?

是如果是ES6,可以用Array.from()方法。

如果不确定环境的话,可以用Array.prototype.slice.call()的方法,将类似数组转换为。

Array.from()的详解:(例子来自MDN)

Set类型的转换

let s = new Set(['foo', window]); 
Array.from(s); 
// ["foo", window]

Map类型的转换

let m = new Map([[1, 2], [2, 4], [4, 8]]);
Array.from(m); 
// [[1, 2], [2, 4], [4, 8]]

类数组的值

function f() {
  return Array.from(arguments);
}
f(1, 2, 3);
// [1, 2, 3]

Array.from()的第二个参数mapFn也很有用处,可以对于传入的类数组值进行定制化修改

Array.from([1, 2, 3], x => x + x);     
 // [2, 4, 6]
Array.from({length: 5}, (v, i) => i);
// [0, 1, 2, 3, 4]

本文分享自微信公众号 - 较真的前端(gh_7af41a2be77e),作者:英俊潇洒你冲哥

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-09-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 编写模块化CSS:命名空间

    用户1687375
  • 关于数据类型的前端面试题总结,不要被鄙视哦~

    用户1687375
  • 为什么 CSS 这么难学?

    用户1687375
  • Elasticsearch-php之高亮搜索 转

    在PHP中,调用elasticsearch进行搜索时,想让结果高亮显示,添加参数highlight,在其下的field中,添加需要高亮的字段,之前写成'cont...

    双面人
  • Java中String做为synchronized同步锁使用详解

    在Java中String是一种特殊的类型存在,在jdk中String在创建后是共享常量池的,即使在jdk1.8之后实现有所不同,但是功能还是差不多的。

    用户1105954
  • JS原生引用类型解析2-Array类型

    (注1:如果有问题欢迎留言探讨,一起学习!转载请注明出处,喜欢可以点个赞哦!) (注2:更多内容请查看我的目录。)

    love丁酥酥
  • 阿里无线11.11 之 Weex——关于移动端动态性的思考、实现和未来

    今天在移动端,尤其是像手机淘宝这样的 app 中,动态性问题逐渐成为一个比较棘手的问题。所谓动态性,就是把移动应用本身的灵活性、迭代更新的周期和成本优化到极致。...

    咻咻ing
  • AVL树

    详细描述,好像跟我自己写的差不多......不过终究是大神级别,讲的就是透彻 1. 概述 AVL树是最早提出的自平衡二叉树,在AVL树中任何节点的两个子树的高度...

    用户1154259
  • 传统门店运营的三大难道,让小程序帮你解决

      小程序的发展来讲,高效、优质、便捷已经成为代名词,使用者和运营者都希望有这样一条连接双方的纽带,而这条纽带最好不需要运营者花时间来运营,因为中小型门店没有太...

    鸭梨小程序iyali
  • 这些Zepto中实用的方法集

    这里先将$.fn.concat理解成原生数组的concat方法,我们会发现,其实他只能铺平一层。例如

    IMWeb前端团队

扫码关注云+社区

领取腾讯云代金券