为什么基本数据类型也会有方法

说明一下写这篇文章的缘由:主要是一个,今天碰到一个朋友,然后就这个基本数据类型这一块,产生了一些分歧,具体的问题是''一个基本数据类型在什么情况下用typeof会输出object'',虽然说当时根据自己的一些理解,把她给说(shui)服了(好吧,我都是胡扯的),但是想想当时确实讲的挺乱的,所以觉得还是有必要在这里重新做一下整理,然后发现,当时的一些表达确实是有误的,距离上一次研究的时间太久了,我有些理不清了,所以这里重新给整理一下。

首先一个,我们都知道JavaScript的数据类型分为两大类,然后他们都有各自的方法,而且有些还是我们在做项目时经常会用到的,就像这个字符串的substr啊、split啊等方法和数组的这个join啊,添加删除等操作方法。

但是却很少会有人去想,这个复杂数据类型有方法是很正常的,就跟夏天要撸串加冰啤酒,冬天要火锅或羊蝎子一样,但是这个基本数据类型嘛,它到底是哪里来的方法哟,这个复杂数据类型的方法是挂载在原型上,那这个基本数据类型的这个方法又是挂载在哪里哟。莫不是隔壁王叔叔家的?它又是如何去使用这些个方法呢?

针对于这个,我们来做个探究。
做这个探究之前,我们先来回忆一下我们创建复杂数据类型的方法

var obj = new Object({
  name: '张三',
  age:18
})
console.log(obj)   //   {name:'张三',age:18}

var arr = new Array([0,1,2,3,4,5,6])
console.log(arr)   //  [0,1,2,3,4,5,6]

有人说上面这都是基本操作,看这个干嘛,但是想一想,好像有点不对,这几个好像还有别的兄弟姐妹啊,如Undefined, Null, Boolean, Number和String这几个,有谁去了解过这几个构造函数吗

接下来我们就要用到这个东西了,话说这几位,都是大英雄,这就是在每一个string的背后,都站着一位默默的String,其他也是一样的,实际上,这几位是一些特殊的引用类型,方便我们操作对应的基本类型。这里涉及到了一个概念''基本包装类型''
我们来看一段简单的代码

var  message = 'helloworld'
var mymessage = message .substring(0,6)
console.log(mymessage) //   'hellow'

在上面这三行代码执行中,发生了很多事。
过程就类似于下面的代码

var _message  = new String(‘helloworld’) //通过String去创建一个实例对象
var mymessage = _message.substring(0,6) //调用这个实例对象的方法,调用完毕之后销毁这个实例对象
console.log(mymessage )  //   'hellow'

在整个过程中,String这个构造函数一直没有出现在我们的视线中,它只是默默地去进行创建,被使用,然后销毁,哇哦,多么沉默的英雄啊。

那现在我们就明白了,基本数据类型调用的并不是它本身的方法,而是在执行这个方法的时候,去为它创建基本包装类型String,然后通过这个基本包装类型的值去创建一个实例对象,再调用这个实例对象的指定方法,最后再将这个实例对象销毁,嗯,基本包装类型也销毁。
基于基本数据类型每一次在执行完一个方法后,动态创建的基本包装类型也随之销毁,所以我们是不能给基本数据类型添加自定义方法的,因为添加了也没用。

var handSomeBoy = ‘苏阿柒’
handSomeBoy.age = 18   //  年年18
console.log(handSomeBoy.age)   //undefined

然后到这一步就该去解决我们上面所遇到的问题了,嗯,就是那个奇葩的问题
当时面试官大人所说方法是在基本数据类型使用toString方法的时候去判断它的类型,我回来试了一下,结果如下:

var num = 5
console.log(typeof num.toString())  // 输出是string

不知道是我的理解有误还是怎么的,我的测试是没有得到对应的结果的

然后根据上面基本包装类型,我又测试了一下

var num1 = 555
var num2 = new Number(num1)
console.log(typeof num1)   //  number
console.log(typeof num2)   //  object

所以,这一步基本上是可以实现问题的要求,当然如果这个题目还有隐性限制条件比如不能对基本数据进行操作什么的话,这种方法就不行了。

以上纯属于个人理解,如果有什么不同的意见或者建议,请给我留言,我会在测试过后尽快更正,谢谢

参考:

http://www.cnblogs.com/SheilaSun/p/4765394.html#3256087

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,254评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,875评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,682评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,896评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,015评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,152评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,208评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,962评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,388评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,700评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,867评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,551评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,186评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,901评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,142评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,689评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,757评论 2 351