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
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- 数据类型回顾——数据类型转换(显式和隐式)—JS学习笔记2015-6-3(第47天)
- js等弱类型语言的"鸭子类型"
- JS--显示类型转换Number—隐式类型转换
- C#中的不同类型之间的显式与隐式转换实现
- js设计模式 鸭子类型
- C++类型转换分为:隐式类型转换和显式类型转换
- 从 ++[[]][+[]]+[+[]]==10? 深入浅出弱类型 JS 的隐式转换
- JavaScript 数据类型转换(显式与隐式)
- JavaScript显式类型转换与隐式类型转换
- JS中的类型转换(显示转换/隐式转换)
- 显式类型转换/隐式类型转换/变量作用域
- JS面试题大坑之隐式类型转换实例代码
- C++:显式和隐式初始化、显式和隐式类型转换
- JS的类型转换,强制转换和隐式转换
- JS的类型转换,强制转换和隐式转换
- C#的隐式类型转换和显式类型转换
- JS--显示类型转换Number—隐式类型转换
- js 隐式类型转换
- js之数据类型-隐式转换-类型检测 学习总结
- JS——数据类型转换,判断数据类型(typeof),parseInt与parseFloat的区别,隐式类型转换