您的位置:首页 > Web前端 > JavaScript

JS 隐式, 显式, 名义和鸭子类型

2020-02-02 09:38 701 查看

隐式, 显式, 名义和鸭子类型

1.类型转换
1.1  ECMAScript 的 Boolean 值、数字和字符串的原始值的有趣之处在于它们是伪对象,这意味着它们实际上具有属性和方法。
1.2  ECMAScript 定义所有对象都有 toString() 方法,无论它是伪对象,还是真对象
1.2.1  Boolean 类型的 toString() 方法只是输出 "true" 或 "false",结果由变量的值决定
var bFound = false;
alert(bFound.toString());//false
1.2.2  Number 类型的 toString() 方法比较特殊,它有两种模式,即默认模式和基模式。
1.2.2.1 默认模式:toString() 方法只是用相应的字符串输出数字值(无论是整数、浮点数还是科学计数法).在默认模式中,无论最初采用什么表示法声明数字,Number 类型的 toString() 方法返回的都是数字的十进制表示。因此,以八进制或十六进制字面量形式声明的数字输出的都是十进制形式的
var a=1.2E+3;
a.toString();//1200
1.2.2.2 基模式:基只是要转换成的基数的另一种加法而已
var a=10;
a.toString();//10
a.toString(2);//1010
a.toString(8);//12
a.toString(16);//a
1.3  ECMAScript 中可用的 3 种强制类型转换如下,注意,用这三个函数之一转换值,将创建一个新值,存放由原始值直接转换成的值。这会造成意想不到的后果。
1.3.1 Boolean(value) - 把给定的值转换成 Boolean 型;
1.3.2 Number(value) - 把给定的值转换成数字(可以是整数或浮点数);
1.3.3 String(value) - 把给定的值转换成字符串;
1.4  隐式类型转换
1.4.1  隐式转换为布尔:“truthy”和“falsy”。当 JavaScript 需要一个布尔值时(例如:if 语句),任何值都可以被使用。 最终这些值将被转换为 true 或 false。
转化为false的是:
1.undefined, null
2.Boolean: false
3.Number: -0, +0, NaN
4.String: ''  Boolean('')//false
1.4.2  字符串的隐式转换
1. '+' 只要其中一个操作数是字符串,那么它就执行连接字符串的操作(而不是加法操作,即使它们是数字)。 6+'10';//610
2.  一些看似是 false 的值,如果转换成字符串,却成了 ‘true’。
Boolean(false);//false String(false);//'false'   Boolean('flase'); //true
Boolean(undefined) //false  String(undefined);//'undefined'    Boolean('undefined'); //true
1.4.3  对象的隐式转换:只有在 JavaScript 表达式或语句中需要用到数字或字符串时,对象才被隐式转换。 当需要将对象转换成数字时,需要以下三个步骤:
1.调用 valueOf()。如果结果是原始值(不是一个对象),则将其转换为一个数字。  2*{valueOf:function(){return 2;}}
2.否则,调用 toString() 方法。如果结果是原始值,则将其转换为一个数字。
3.否则,抛出一个类型错误。
1.4.4  ==
1.如果比较的两者中有布尔值(Boolean),会把 Boolean 先转换为对应的 Number,即 0 和 1,然后进行比较。
2.如果比较的双方中有一方为 Number,一方为 String时,会把 String 通过 Number() 方法转换为数字,然后进行比较。
3.如果比较的双方中有一方为 Boolean,一方为 String时,会将双方转换为数字,然后再进行比较。
4.如果比较的双方中有一方为 Number,一方为Object时,则会调用 valueOf 方法将Object转换为数字,然后进行比较。
1.4.5 -/+
1.-('212');//212
2.+('233');//233
3.Math.floor(-3.14)//-4
4.~~-3.14;//3
5.-3|| 3 //-3
6. -3&& 3;//3
1.4.6  鸭子类型;如果它走起路来像鸭子,叫起来也是鸭子,那么它就是鸭子。”

转载于:https://www.cnblogs.com/shuajing/p/10802976.html

  • 点赞
  • 收藏
  • 分享
  • 文章举报
aiuyuu628048 发布了0 篇原创文章 · 获赞 0 · 访问量 402 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: