有这样一个面试题:

此题考查的是其他类型的值转换为字符串后的结果

下面我们就由此来总结一下其他类型的值转为字符串后的值都是什么?

  从上面的实例可以看出,基本数据类型的值转换成字符串都如我们预期的那样。但是对于object对象,转换为字符串却出乎我们的意料,都是 [object Object]。两个不同的对象{key:123}和{key:456}转换成字符串都是相同的值 '[object Object]'。

  需要我们注意的是 toString() 方法是Object的原型方法,由于js中一切都是对象,所有的类型的值都继承了这个方法,而 Object.prototype.toString.call() 也可以用来判断对象的类型,是判断类型值的最准确的方法。

  特别提醒:除了Object对象之外,其他类型直接调用 toString() 方法和通过 Object.prototype.toString.call() 使用得到的结果是截然不同的,直接调用是转换为字符串,而通过 Object.prototype.toString.call() 来使用的话就是判断类型了,得到的结果是类似 [object type] 的结果。其中type代表类型,首字母也是大写。

  判断数据类型的方法详情见我另一篇博文js中判断类型的四种方法

解析代码如下:

TIPS:

  对象的键名可以是字符串和Symbol值,所以当键名为除了字符串和Symbol值以外的其他类型值时,都是需要转换为字符串的,

  但是注意,如果是Symbol值,可以直接当做键名

  键名在对象中存在时,可以不要引号,但是通过a[b]的方式调用键名时,此时b必须是带有引号的字符串

对于第一题:a[b] = 'b'  ==>  a['123'] = 'b',  a[c] = 'c'  ==>  a['123'] = 'c'

      相当于先给 a['123'] 赋值为字符串 'b',在给它赋值为字符串 'c',所以最后对象a为 {123:'c'}

对于第二题:由于Symbol的值是唯一的,所以 b 不等于 c,

      此时对象a 的值为 {Symbol('123') : 'b',Symbol('123') : 'c'}

对于第三题:{key:123}和{key:456}调用toString方法转换为字符串的值同为 '[object Object]',所以跟第一题一样,

      此时对象a的值为 {[object Object] : 'c'}

所以上面面试题的答案是:'c','b','c'。

总结:

  1.Object对象转换为字符串和判断数据类型都是直接调用 toStirng() 方法,得到的结果都是 [object Object]。

  2.除了Obeject之外的其他类型,直接调用 toStirng() 方法,可以转换为字符串类型,判断数据类型得用 Object.prototype.toString.call() 方法!

   


js中其他数据类型的值转为字符串的相关总结的更多相关文章

  1. Javascript高级编程学习笔记(3)—— JS中的数据类型(1)

    前一段时间由于事情比较多,所以笔记耽搁了一段时间,从这一篇开始我会尽快写完这个系列. 文章中有什么不足之处,还望各位大佬指出. JS中的数据类型 上一篇中我写了有关JS引入的Script标签相关的东西 ...

  2. js中的数据类型

    JS中的数据类型: ——数字  (number)NaN ——字符串(string) ——布尔  (boolean)——函数  (function)     也是对象的一种 ——对象  (object) ...

  3. 如何判断js中的数据类型?

    js六大数据类型:number.string.object.Boolean.null.undefined string: 由单引号或双引号来说明,如"string" number: ...

  4. 浅谈js中的数据类型,使用typeof获取js数据类型

    JS中的数据类型 1):Undefined——值未定义 注:Undefined类型只有一个值,即特色的undefined.在使用var声明变量但未对其加以初始化时,这个变量的值就是undefined ...

  5. js中的数据类型及其转换

    Js中的数据类型 Js中的数据类型一共有六种,即number,string,boolean,underfine,null,object. 一,number Number数据类型指的是数字,可以为整型, ...

  6. JS中的数据类型和转换

    一.JS中的数据类型 js中的数据类型可以分为五种:number .string .boolean. underfine .null. number:数字类型 ,整型浮点型都包括. string:字符 ...

  7. js中的数据类型、以及浅拷贝和深拷贝

    一.js中的数据类型 1.基本类型(值类型):Undefined.Boolean.String.Number.Symbol 2.引用类型:函数.数组.对象.null.new Number(10)都是对 ...

  8. js中的数据类型和判断数据类型

    js中的数据类型和判断数据类型 基本数据类型,六大基本数据类型:字符串(String).数字(Number).布尔(Boolean).对象(Object).空(Null).未定义(Undefined) ...

  9. js中获取数据类型

    ES5中,js中数据类型:number.string.boolean.undefined.null.object js中获取数据类型常用的四种方式 实例: var a = 123, b = true, ...

随机推荐

  1. CMD命令进入某个目录

    1.开始->运行->CMD 2.进入某个磁盘,直接盘符代号:如D:,不用CD 命令切换 3.进入除根录以下的文件夹 cd 文件夹路径 例如我要进入 E:/Program Files/PHP ...

  2. 阿里云服务器安装mysql数据库及连接使用

    第一步:安装mysql 我个人是申请的阿里云ecs服务器CentOs操作系统,由于是初装咱们直接进行安装 1.首先从官网下载安装mysql-serve  # wget http://dev.mysql ...

  3. 暑假自学java第七天

    1,Object类: 任何类的父类都是Object 任何子类的对象都可以赋值给父类的引用.任何类的所有实例都可以用Object来代替 (3条消息) java中的Object类_iqqcode-CSDN ...

  4. [心得体会]spring事务源码分析

    spring事务源码分析 1. 事务的初始化注册(从 @EnableTransactionManagement 开始) @Import(TransactionManagementConfigurati ...

  5. 25 Linux中的信号

    Linux中的信号 信号是进程在运行过程中,由自身产生或由进程外部发过来的消息(事件).每个信号用一个整型常量宏表示,以SIG开头,比如SIGCHLD.SIGINT等,它们在系统头文件中定义,也可以通 ...

  6. mysql被收购 用mariadb (转)

    ~]# systemctl start mysql.service 要启动MySQL数据库是却是这样的提示 Failed to start mysqld.service: Unit not found ...

  7. leetcode 861 翻转矩阵后的得分

    1. 题目描述 2.思路分析: 1. 首先这里的翻转分为了行翻转和列翻转,我们这里只需要求如何翻转后得到最大值,有点贪心的思想,因为最大值一定是固定的 至于是什么路径到达的最大值不是我们所关心的,我们 ...

  8. XCTF 3rd-GCTF-2017 hackme

    一.查壳的老生常谈了..2分的题目就不多bb了. 二..elf文件,拖入ida,直接查找字符串,找到对应的函数 三.直接分析: 这里讲道理我当时很懵逼,因为进去这个函数后,发现伪码非常复杂,这里困了挺 ...

  9. FastTunnel-开源内网穿透框架

    FastTunnel - 打造人人都能搭建的内网穿透工具 FastTunnel是用.net core开发的一款跨平台内网穿透工具,它可以实现将内网服务暴露到公网供自己或任何人访问. 与其他穿透工具不同 ...

  10. 深入浅出图神经网络 GCN代码实战

    GCN代码实战 书中5.6节的GCN代码实战做的是最经典Cora数据集上的分类,恰当又不恰当的类比Cora之于GNN就相当于MNIST之于机器学习. 有关Cora的介绍网上一搜一大把我就不赘述了,这里 ...