2019-12-11第三章:类型转换

        有关12-10的一点小补充:isNaN()同样适用于对象。其处理时会优先调用valueOf方法,确定其返回值是否可以转换为数字,如果不可以,则调用toString()方法,再对返回值进行判断。

可以发现,哪怕是类的嵌套也是可以识别的

    ⑤ 数值转换。用作数值转换的函数共有三个,Number(),ParseInt(),ParseFloat(),三者使用上有很大差别,依次讨论。

    首先是Number():

    Boolean  ->  0或1;

    数字值  ->  传入传出;

    null  ->  0;

    undefined  ->  NaN;

    字符串:只包含数字时,转化为十进制整型,同时自动忽略前位的0('011' - > 11);包含浮点数时,转化为十进制浮点型;包含十六进制格式时,转化为同等大小的10进制整型('0xA' ->  10);为空字符串时,转化为0;如果字符串中包含除以上的任意格式,返回NaN(例如'?!#@%^@');

    Object:转换规则同上文isNaN();

    其次是ParseInt():

    ParseInt在Number的基础有了一些改进,例如:ParseInt在处理字符串时,会自动过滤字符串的前N位空格,直至找到第一个非空字符,如果第一个字符是数字或负号,ParseInt会继续查看下一位字符,依次推进,这样做的效率很高;因此,ParseInt可以从前缀为若干个空字符的串中提取第一个数字字符串,这一点在工程开发中极为实用:

自动过滤空格

    另外parseInt可以指定转化的进制,其第二个参数可以指定N进制,例如( parseInt(10,10) = 10; parseInt(10,2) = 2),另外,在使用parseInt时,如果不指定参数,一定要小心符合8进制或16进制的字符串被转化为对应进制的数字,引发错误。

3.字符串类型

    ① 字符串基础。在js中,字符串可以使用''或""表示。字符串中有一些典型的转义字符,在js中被称为字符字面量(\n,\r,\t,\\ 等等)。字符串的特点是不可变。一旦被创建,那么他对应的值也就唯一确定,如果我们需要更改一个字符串的值,js所使用的方式是先销毁,后填充的方式:

    var str1 = 'hunterMonster'        //创建一个可以容纳12个字符的字符串

    var str2 = ':world'        //创建一个可以容纳5个字符的字符串

    str1 = str1 + str2        //创建一个可以容纳17个字符的字符串,将str1与str2填充,再销毁str1,再将这个新字符串命名为str1

    ② 字符串的强制类型转换。最常用的是toString()方法,他返回除了null和undefined的任何变量的字符串表示(包括字符串本身也可以使用toString()函数,他返回的是字符串的副本(这是一个深拷贝的过程 ->结果是两个字符串地址不同,但值相同),string()与其类似,但string()同样可以处理null和undefined。

toString转万物

4.Object类型

    ① Object基础。ECMAScript中的对象就是数据与功能的集合,这点和大多数语言并无太多差异。可以使用new操作符来声明创建,在创建时,如果不需要传入参数,可以省略()。

二者完全等价

    在这里必须重新强调一个思想:即javascript中,类是一切。而Object是一切类和实例的基础(可以理解为原型或父类),换句话说,Object拥有的方法和属性毫无疑问地存在于每一个对象中。

    下面简单聊聊Object的方法和属性:

        Constructor:构造函数,保存着创建当前目标所使用的函数,对于Object类来说,就是Object()。

        hasOwnProperty(string propertyName):检查当前Object是否有propertyName这个属性。

        isPropertyOf(Object):检查当前传入的Object是不是当前Object的原型。

        proPertyIsEnumerable(propertyName):检查当前Object是否可以使用for-in循环。

        以及toLocaleString(),toString(),valueOf()三个简单方法,不多赘述。

    值得一提的是,区别{}和Object()的区别?查阅了一些资料,发现写的都非常笼统,大多数答案除了对比了a -- {} 和 b -- new Object() 以及c -- var Obj = function() {}; var c = new Obj();三者的变量创建速度(c > a >> b),并没有更深的解释。之前部门在做code-review的时候曾经有针对java讲过不调用构造函数(方法C)的本质是拷贝,在时间上远优于使用构造函数的常规类构造方法,想必在此也是类似的道理。而c>a的原因还不得而知。

    附上一篇参考帖子:https://www.jianshu.com/p/00bc4f105f7e,有空会再回来看看这个问题。

    另外,操作符中的一元操作符比较简单,位操作符更倾向于底层的二进制计算实现,在工程中使用不多,就不多赘述了。明天从44页,布尔操作符开始学习。

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