JS中的toString、Object.toString、Object.prototype.toString
不同类型值的toString方法:
//Number
const num = 123;
num.toString(); // '123'
(123).toString(); // '123' 整数必须赋值给变量后或放在括号中再调用toString
1.23.toString(); // '1.23' 小数可直接调用NaN.toString(); // 'NaN'
Infinity.toString(); // 'Infinity'-Infinity.toString(); // -Infinity 根据运算符优先级关系,先执行toString再将String转为Number//数字通过toString进行进制转换
num.toString(); // '123' 默认转为十进制
num.toString(2); // '1111011'
num.toString(8); // '173'
num.toString(16); // '7b'//Array
[1,2,3].toString(); // '1,2,3' 结果与数组的join()方法相同//Object
({}).toString(); // "[object Object]"//Function
const func = function(){};
func.toString(); // "function(){}"//Boolean
const t = true, f = false;
t.toString(); // 'true' 返回对应字符串
f.toString(); // 'false' //undefined、null对象没有toString方法
Object.toString与Object.prototype.toString的区别
首先明确一下toString相同的调用方式:
console.log(toString === window.toString); // true
console.log(window.toString === Object.prototype.toString); // true
Object原型链上的toString方法可以用于对象类型的判断,如常用的区分数组与普通对象。(参考文章)
Object.prototype.toString.call(''); //[object String]
Object.prototype.toString.call(1); //[object Number]
Object.prototype.toString.call(true); //[object Boolean]
Object.prototype.toString.call([]); //[object Array]
Object.prototype.toString.call({}); //[object Object]
Object.prototype.toString.call(undefined); //[object Undefined]
Object.prototype.toString.call(null); //[object Null]
Object.prototype.toString.call(new Function()); //[object Function]
Object.prototype.toString.call(new Date()); //[object Date]
Object.prototype.toString.call(new RegExp()); //[object RegExp]
Object.prototype.toString.call(new Error()); //[object Error]Object.prototype.toString.call(document); //[object HTMLDocument]
document.toString(); //[object HTMLDocument]
Object.prototype.toString.call(window); //[object Window]
window.toString(); //[object Window]//toString通过原型链调用Object.prototype.toString,可达到同样效果
toString.call([]); //[object Array]
由此而引出疑问,为何通过Object.toString的方式不能调用原型链上的toString方法呢?
虽然所有对象的原型链最顶端都是Object.prototype,但同时Object本身也是一个构造函数,继承于Function,调用Object.toString最终通过原型链调用的是Function.prototype.toString。相关关系如下:
Object.prototype.__proto__ === null; // true
Function.prototype.__proto__ === Object.prototype; //trueObject.toString === Function.prototype.toString; //true
JS内置对象即构造函数的toString方法
Number、String,Boolean,Array,RegExp、Date、Function等内置对象均重写了Object原型上的toString方法,作用为将当前数据类型转为字符串类型。
Number.toString(); // "function Number() { [native code] }"
String.toString(); // "function String() { [native code] }"
Boolean.toString(); // "function Boolean() { [native code] }"
Array.toString(); // "function Array() { [native code] }"
RegExp.toString(); // "function RegExp() { [native code] }"
Date.toString(); // "function Date() { [native code] }"
RegExp.toString(); // "function RegExp() { [native code] }"
Function.toString(); // "function Function() { [native code] }"
JS中的toString、Object.toString、Object.prototype.toString相关推荐
- 由Object.prototype.toString.call( )引发关于toString( )方法的思考
引言 前端面试中有这么一道经典的问题,如何判断一个对象是否为数组? ES5提供了一个确定对象是否为数组的函数 Array.isArray(object); 复制代码 其中,object是必须的,表示要 ...
- JS中Prototype属性解释及常用方法
1.prototype的定义 javascript中的每个类都有prototype属性,其prototype属性的解释是:返回对象类型原型的引用.每一个构造函数都有一个属性叫做原型.这个属性非常有用: ...
- 关于js中的时间处理
关于js编程, 主要是, 绝大部分是用 jquery. 但是, js原生的一些方法和属性也是要掌握的, 这个只是在 遇到的时候, 记一下就好了, 如: event的relatedTarget属性: 主 ...
- 说说JS中的浅拷贝与深拷贝
outline: 为什么要说JS中深拷贝与浅拷贝 JS对类型的分类 immutable与mutable 简单类型检测 浅拷贝VS深拷贝 为什么要说JS中深拷贝与浅拷贝 近来在研读underscore的 ...
- js中的暂停和异步问题
除了Narrative JS,jwacs(Javascript With Advanced Continuation Support) 也致力于通过扩展JavaScript语法来避免编写让人头痛的异 ...
- js中的sleep、pause 实现
除了Narrative JS,jwacs(Javascript With Advanced Continuation Support) 也致力于通过扩展JavaScript语法来避免编写让人头痛的异 ...
- JS中常见的几种继承
1原型链继承 子类构造函数.prototype = 父类的实例; 子类构造函数.prototype.constructor = 子类构造函数 特点: 1.js继承是把父类的原型放到子类的原型链上,实例 ...
- Js中自定义对象四种方式
Js中自定义对象四种方式 1 类似JAVA有参构造方式: 1.定义对象: function 对象(属性[age]){追加属性:如(this.age = age)[this代表当前对象的地址值的引用]追 ...
- js定义全局变量 vue页面_vue.js中如何定义全局变量?
vue.js中如何定义全局变量?下面本篇文章给大家介绍一下在 Vuejs 项目中如何定义全局变量.有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助. 在 Vuejs 项目中如何定义全局变 ...
- js中关于类及类继承
在面向对象的程序设计语言中,类和类之间有显式的继承关系,一个类可以显式的指定继承了哪个类,子类将具有父类的所有属性和方法.js虽然也支持类.对象的概念,但没有继承的概念,只能通过特殊的手段来扩展原有的 ...
最新文章
- python中关于sqlite3数据库删除数据的使用
- block为什么用copy以及如何解决循环引用
- 微信自定义tabbar有小红点_自定义微信小程序tabBar组件上边框的颜色
- ubuntu安装后需了解的基本操作
- WinForm的App.config
- python 通信模块_python 多进程通信模块
- django orm_Django ORM简介
- 史上最拉风年货?苏宁门店私人飞机开售 网友:这个真香不了吧
- java项目qq聊天室_简单的qq聊天室项目(作者涂俊伟)
- 第三百九十一节,Django+Xadmin打造上线标准的在线教育平台—404,403,500页面配置...
- POJ NOI MATH-7656 李白的酒
- 你真的懂病毒式营销吗
- Git 版本控制原理
- 光功率 博科交换机_交换机是否支持查看光模块型号及收发光功率
- nginx配置Strict Transport Security
- scala特征加工中的报错记录和调试
- 单片机IO口低电平不为0V
- mini2440----keil for AMR之IIC读写EEPROM(AT24C08)
- linux 参数解析,Linux 命令行参数解析
- (面经总结)一篇文章带你整理面试过程中关于OSI 七层模型的相关知识
热门文章
- layui java_LayUI 的安装及使用LayUI 的介绍
- 初中计算机应用微课的教学设计,信息技术微课教案
- 自学编程和计算机科班出身的差别在哪里
- 《Continual lifelong learning with neural networks : A review》阅读笔记
- 干货!通过结合答案相关性改进以查询为中心的自动文本摘要
- 星空主题设计理念_星空规划设计说明
- hcl新华三 vlan实验
- dialog弹出时,点击dialog之外的地方时,dialog不消失。
- 协同过滤与隐语义模型推荐系统实例3: 基于矩阵分解(SVD)的推荐
- 污水处理程序西门子Wincc+S7-300污水处理大项目 带西门子Wincc上位机+S7-300程序