美文网首页Web前端之路JavaScript 进阶营
[JS开发者应懂的33个概念]4. 隐式, 显式, 名义和鸭子类

[JS开发者应懂的33个概念]4. 隐式, 显式, 名义和鸭子类

作者: 三味罐 | 来源:发表于2019-08-29 09:50 被阅读0次

概念

Javascript是一门动态弱类型语言。

何为动态?

既定义了一种类型的数据,仍然可以赋值为其他类型的数据。

例如:

var x = 1; 
x = 'string'

何为弱类型?

既兼容不同类型之间的数据进行比较。

例如:

var x = true;
var y = 1;
console.log(x == y) // true

类型转换

在JavaScript中,类型转换可以分为两类:显式类型转换隐式类型转换

显式类型转换

定义

显式转换既通过函数进行手动的类型转换。

下面通过Number()、String()、Boolean()这三个基本类型函数进行举例,主要从基本数据类型和对象两方面进行阐述。

Number()

对于基本数据类型,其转换规则如下:

console.log(Number(null)); // 0
console.log(Number(undefined)); // NaN
console.log(Number(1)); // 1
console.log(Number('1')); // 1
console.log(Number(true)); // 1
console.log(Number(false)); // 0
console.log(Number('')); // 0
console.log(Number('a')); // NaN

总结:

  • 对于null和undefined两类比较特殊的值,分别返回null和NaN

    (个人理解:因为null是一个对象,只是当前值为null,所以返回0;undefined的意思是并未进行定义,因此返回NaN)

  • 对于true和false,则和日常理解一致,分别返回 1 和 0

  • 对于字符串:

    若为空,则返回0

    若为纯数字字符串,则返回对应数字

    其余字符串则返回NaN


对于对象,其转换规则如下:

简单来说,大部分对象都会得出NaN的结果。(对于对象没有进行深究...以后仔细看了再进行补充)

String()

对于基本数据类型,其转换规则如下:

console.log(String(null)); // 'null'
console.log(String(undefined)); // 'undefined'
console.log(String(1)); // '1'
console.log(String('1')); // '1'
console.log(String(true)); // 'true'
console.log(String(false)); // 'false'
console.log(String('')); // ''
console.log(String('a')); // 'a'

总结:

根据具体内容转换为对应的字符串


对于对象,其转换规则如下:

var x = ['1', '2', '3'];
console.log(String(x)); // 1,2,3
var y = {
  value: 'demo'
}
console.log(String(y)); // [object Object]

总结:

  • 对于数组,会转换为该数组对应的字符串

  • 对于对象,会转换为类型字符串

Boolean()

除了空字符串、数字0、fasle、null、undefined、NaN这几类数值外,其余数值均转化为true

// 以下表达式均返回false
console.log(Boolean(''));
console.log(Boolean(0));
console.log(Boolean(false));
console.log(Boolean(null));
console.log(Boolean(undefined));
console.log(Boolean(NaN));
隐式类型转换
定义

隐式类型转换既在进行某些操作(例如:+、==,这两种运算符使用频率最高)时,如果两边数据的类型不一致,数据会自动进行类型转换再进行运算。

当进行隐式类型转换时,主要是涉及以下三种转换:

  • ToPrimitive

  • ToNumber

  • ToString

至对应不同的运算符也会有各种各样的情况发生,这里不做详细介绍。日后若做了系统学习再进行补充...(详情可看参考文章的第4篇)

参考文章

  1. 数据类型的转换

    https://wangdoc.com/javascript/features/conversion.html#number

  2. What exactly is Type Coercion in Javascript?

    https://stackoverflow.com/questions/19915688/what-exactly-is-type-coercion-in-javascript

  3. 有趣的JavaScript隐式类型转换

    https://www.cnblogs.com/yugege/p/5277883.html

  4. 你所忽略的js隐式转换

    https://juejin.im/post/5a7172d9f265da3e3245cbca#heading-8

    (这篇文章对隐式转换有较为详细的介绍)

  5. ECMAScript规范

    https://ecma262.docschina.org/#sec-toprimitive

    (关于类型转换,规范里面也会有详细的解读,而且看规范文档是最为官方的)

相关文章

  • [JS开发者应懂的33个概念]4. 隐式, 显式, 名义和鸭子类

    概念 Javascript是一门动态、弱类型语言。 何为动态? 既定义了一种类型的数据,仍然可以赋值为其他类型的数...

  • C++类型转换

    C++的类型转换分为隐式转换和显式转换 隐式转换举例: int i=4; double d=i;//隐式转换 显式...

  • 协同过滤算法

    内容来源:《dataminingguide》-----隐式评价和基于物品的过滤算法章节 1、 显式&&隐式评级 显...

  • JS里的数据类型转换

    在js中,数据类型转换分为显式数据类型转换和隐式数据类型转换。 1, 显式数据类型转换 a:转数字: 1)Numb...

  • 33 个 js 核心概念(四):显式 (名义) 与 隐式 (鸭子

    原文地址:阿木木的博客 前言 说实话,JavaScript 的类型转换是个相当头疼的问题,无论是对于初学者还是有经...

  • 类型转换

    js的类型转换分成显示和隐式,显式转换常用类型转换函数进行转换,隐式最多用在条件判断,通常是把字符转为布尔型。类型...

  • Spring Bean 配置

    Spring Bean 配置三种方式: XML显式配置 Java中显式配置 隐式Bean发现机制和自动装配。 隐式...

  • Android之Intent

    一、显式意图和隐式意图 1.1 显式 1.2 隐式 作用:可用于分享给与自身配置了同样的intent-filter...

  • iOS核心动画高级技巧 - 4

    8. 显式动画 显式动画 如果想让事情变得顺利,只有靠自己 -- 夏尔·纪尧姆 上一章介绍了隐式动画的概念。隐式动...

  • 关于Service的启动的小细节

    Service启动方式 显式启动方式 隐式启动方式 这是Service隐式和显式启动的代码范例。不同应用之前只能用...

网友评论

    本文标题:[JS开发者应懂的33个概念]4. 隐式, 显式, 名义和鸭子类

    本文链接:https://www.haomeiwen.com/subject/gxmbectx.html