显示类型转换和隐式类型转换
显示类型转换
1.Number():函数把对象的值转换为数字,如果对象的值无法转换为数字,那么 Number() 函数返回 NaN。
var a = 'true';console.log(typeof(Number(a)) + '-' + Number(a)); // number-NaNvar a = '1a';console.log(typeof(Number(a)) + '-' + Number(a)); // number-NaNvar a = undefined;console.log(typeof(Number(a)) + '-' + Number(a)); // number-NaNvar a = null;console.log(typeof(Number(a)) + '-' + Number(a)); // number-0var a = '123';console.log(typeof(Number(a)) + '-' + Number(a)); //number-123var a = true;console.log(typeof(Number(a)) + '-' + Number(a)); //number-1
2.parseInt():函数可解析一个字符串,并返回一个整数
var a = '3.14';console.log(typeof(parseInt(a)) + '-' + parseInt(a));//number-3var a = true;console.log(typeof(parseInt(a)) + '-' + parseInt(a));//number-NaNvar a = null;//undefined,NaNconsole.log(typeof(parseInt(a)) + '-' + parseInt(a));//number-NaNvar a='10';console.log(parseInt(a,16));//16var a='b';console.log(parseInt('abc123'));//NANvar a='b';console.log(parseInt('123abc'));//123
3.parseFloat():函数可解析一个字符串,并返回一个浮点数
var a = 'b';console.log(parseFloat('3.1415')); //3.1415var num = parseFloat('3.1415')console.log(num.toFixed(2));//3.14 四舍五入
4.String():函数把需要转换的值转换为字符串,并返回。
console.log(typeof(String(123))); //stringconsole.log(typeof(123 + '')); //string
5.toString()
var str = '3.14';console.log(str.toString()); //3.14var str = undefined; //null也没有toString()console.log(str.toString()); //报错var str = '100';console.log(parseInt(str, 2));//二进制100变十进制 4console.log(parseInt(str, 2).toString(16));//4
6.Boolean()
console.log(Boolean(1));//trueconsole.log(Boolean(null));//false NAN 空字符串 0 undefined null
隐式类型转换
+运算符内部会隐式调用String()
var a = 'a' + 1; //String(1) 'a'+'1'=a1console.log(a) //a1
运算符内部(-,*,/,%)会隐式调用Number()
var a = '3' * 2; //* / - % str-->Number转换为数字console.log(a); //6var a = '1' > 2; //转换成Number >=<console.log(a); //false//转换成ASCII var a='a'>'b';var a=1=='1';console.log(a);//truevar a=1==='1';//不进行隐式转换var a=NaN==NaN;//false
内部会隐式调用Bollean()
var a1=2>1>3;var a2=2>1==1;console.log(a1);//falseconsole.log(a2);//truevar a=undefined>0;//undefined和null既不大于0也不小于0 也不等于0var a=null==0;//falsevar a=undefined==null;//truevar a=undefined===null;//falseconsole.log(a)//false
运算符内部(++/–,正负)会隐式调用Number()
var a = '123';a++;console.log(a); //124var num='123';console.log(typeof(+num));//numbervar num='abc';console.log(typeof(-num)+':'+-num);//number:NaN
isNaN() 需要经过Number()处理
console.log(isNaN(NaN));//trueconsole.log(isNaN(undefined))//trueconsole.log(isNaN(null));//falseconsole.log(isNaN('ab'));//trueconsole.log(isNaN('null'));//trueconsole.log(isNaN(1));//false
经典面试题
1.if(typeof(a) &&(-true) +(+undefined)+ ' '){//"undefined" && "NaN " (-1+NaN+' ')console.log('通过了')}else{console.log('没通过')}console.log(a);//通过了//a is not defined
未被定义的变量直接console.log会报引用错误,但是放在typeof里面不会出错。
2.console.log(!!' '+!!''-!!false || '未通过');
//1
或运算符遇到一个条件为真就直接输出运算结果,遇到条件为假的情况就继续判断。
分析:前面的’ ‘中是一个空格,空格是true,在两次!之后还是true,遇到+运算符转换为数字1,后面的’'是一个空字符串,它是false,两次!!后还是false,转换为数字0,由此可知,或运算符前面的计算结果是1,所以结果为1。
3.window.a || (window.a = '1');console.log(window.a);//'1'
分析:括号的面的优先级是最高的,先看括号里面的内容。
4.var =???if(a == 1 && a == 2 && a == 3){console.log("1");}
分析:与运算符条件条件全部为真才会输出运算结果。上述题中,a需要满足三个条件,此时应该想到复杂数据类型转换。
复杂数据类型转number顺序如下:
1.先使用valueOf()方法获取其原始值,如果原始值不是number类型,则使用 toString()方法转成string
2.再将string转成number运算
对象的valueOf()方法是可以重写的。
var a = {
i : 0,//声明一个属性i
valueOf:function ( ) {
return ++a.i;//每调用一次,让对象a的i属性自增一次并且返回
}
}
if (a == 1 && a == 2 && a == 3){//每一次运算时都会调用一次a的valueOf()方法
显示类型转换和隐式类型转换相关推荐
- js类型转换(隐式类型转换显式类型转换)
我们需要了解任何计算都只能在相同的数据类型之间执行.如果我们强制JavaScript执行执行一些操作,例如在字符串中添加一个数字,在这种情况下,js编译器会默认将数字更改为字符串类型,然后将两者连接起 ...
- JS强制类型转换和隐式类型转换
一.隐式类型转换 隐式类型转换会自动根据运算符进行类型转换.隐式类型转换的情况主要有以下几种. 如果表达式中同时存在字符串类型和数字类型的操作数,而运算符使用加号+,此时 JavaScript 会自动 ...
- 关于显式类型转换以及隐式类型转换
哈喽嗷,铁汁们,咱们又见面了.是我嗷,一个不正经楼主. 首先提出一点,关于这个小细节专栏,看了绝对没好处(滑稽) 咳咳,咱们言归正传. 目录 隐式类型转换 ①算术运算中的隐式转换 规则一:字符和整数的 ...
- 显式类型转换和隐式类型转换区别?
一般情况下,数据的类型的转换通常是由编译系统自动进行的,不需要人工干预,所以被称为隐式类型转换.但如果程序要求一定要将某一类型的数据转换为另外一种类型,则可以利用强制类型转换运算符进行转换,这种强制转 ...
- oracle c op,ORACLE中内部函数SYS_OP_C2C和隐式类型转换
什么是SYS_OP_C2C呢?官方的介绍如下: SYS_OP_C2C is an internal function which does an implicit conversion of varc ...
- (基础)JavaScript类型转换(强制类型转换+隐式类型转换)
JavaScript 中有五种基本数据类型(其中包括 String.Number.Boolean.Function.Symbol).三种对象类型(其中包括 Object.Date.Array)和两种 ...
- JavaScript类型转换之显式类型转换
JavaScript中显式类型转换有六类,分别是Number(mix).parseInt(string).parseFloat(string).String(mix).toString().Boole ...
- c语言float转换为int_C语言的隐式类型转换和显示类型转换
C语言是一种强类型语言,当使用一种类型的对象代替另外一种类型的对象进行操作时,必须首先进行类型转换. 类型转换的方式,一般可分为隐式类型转换和显示类型转换(也称为强制类型转换). 1.隐式类型转换 隐 ...
- ES5-3 循环、引用值初始、显示及隐式类型转换
1. 循环 for循环的三个参数abc,a只执行一次,c在每次循环后执行 // 打印0-100的质数 1不是质数 var list = [2] for (var i = 3; i <= 100; ...
最新文章
- MySQL第8天:MySQL索引优化分析之SQL慢
- 使用文本文件(.txt)进行数据存取的技巧总结
- asarray java,Java
- zabbix cpu核数 windows_Zabbix的应用(6)----常见错误
- Java大数一些个人的见解
- mysql jdbc 占位符_JDBC中占位符报错是什么鬼啊
- 过拟合解决方法python_欠拟合、过拟合及其解决方法
- 【LeetCode】剑指 Offer 11. 旋转数组的最小数字
- 数据遍历打印得小列子
- 17秋 软件工程 团队作业 同学录
- js getday()获取值不对
- 这些图片用真的亮瞎我的双眼了
- c语言作业存款,C语言编程实现怎样存钱利最大
- inkscape如何裁剪_科学网—如何在Inkscape图中输入LaTeX公式? - 李金磊的博文
- 邮件smtp协议 mail
- Go GIF 动画
- ArcGIS10.2自带的Python2.7下安装pip
- 教你用笔记本充当无线路由,wifi上网了!!!
- 2023年Java面试题_Redis
- 用计算机绘制阀体各零件步骤,UG10.0经典实例之液压球阀建模方法
热门文章
- [Echarts可视化] 一.入门篇之简单绘制中国地图和贵州地区
- AVProVideo☀️九、“今朝若能同淋雪,此生也算共白头”。一曲《南山雪》,学习给视频做字幕。
- 停车场设计软件测试,停车场车位视频检测系统设计
- python爬虫基础(12:app数据爬取)
- 引入spring-boot-starter-redis包报错 :unknown
- Python学习日记07
- 左除与右除的区别--MATLAB
- 国产化服务器安装Mysql数据库
- 数据结构课程设计(四):行车路线问题(C++、图、迪杰斯特拉算法、最短路径)
- BeautifulSoup里“find_all“和“findAll“的区别