JavaScript 特有奇葩问题“字符串类型与数字类型混乱”的分析与解决,与类型转换
字符串类型与数字类型的混乱,应该是JS最著名的奇葩问题了。
恰好最近遇到这个问题,在这里对这个问题的解决方法及产生原因进行总结与分析。
Java 语言与 JavaScript 语言是什么关系。这是初学者常常疑惑的问题。通常情况下大家会回答“有个屁的关系”。但Java 与JavaScript真的一点关系都没有吗?答案当然是否定的。这两种语言虽然有着各种各样的不同,但他们的语法却非常的相似,或者说JavaScript刻意的模仿了Java语言的语法。
我们知道Java是一种强类型语言,变量在声明时必须变量的数据类型。而JavaScript却是一种弱类型语言。
在Java中数字类型相加的时候用的是字符 “+” ,字符串拼接使用的也是字符 “+”。因为JavaScript是强类型的,这个时候虽然都是 “+”,但他的语义却是十分清楚的,不会出现什么问题。
但是在JavaScript中,情况却发生了变化。在声明变量的时候,参数的类型是明确的。例如
var parameter1 = "231";//这是一个字符串变量var parameter2 = 231; //这是一个数值(int)型变量
然而问题就出在传递参数的时候,例如如下情况
var parameter = 231;fun(parameter);function fun(parameter){//在这里,传递进来的参数是字符串}
更奇葩的是,同一个变量。使用 “-” 运算符的时候,做的是数值相减的运算,而使用“+”运算符的时候,却是字符串的拼接。例如:
var parameter = 7;fun(parameter);function fun(parameter){for(var i= parameter-2;i<=parameter+2;i++){console.log(i);//这里parameter-2 算出的值是5(数值运算)//而parameter+2算出的值却是72(字符串拼接)//这个循环会将从5到72的数字都打印一遍。是的,妈蛋,循环的时候他又变回数字了 ( ╯-_-)╯┴—┴}}
那么其他弱类型语言为啥不会出现这个奇葩的问题呢?
拿PHP举例,PHP的字符拼接运算符是“.”。数值运算加 的运算符为"+"。故不可能出现这个问题。
以下是问题的解决办法:
parameter = parseInt(parameter);
附:JS类型转换总结
parseInt("1234blue"); //returns 1234 parseInt("0xA"); //returns 10 parseInt("22.5"); //returns 22 parseInt("blue"); //returns NaNparseFloat("1234blue"); //returns 1234.0 parseFloat("0xA"); //returns NaN parseFloat("22.5"); //returns 22.5 parseFloat("22.34.5"); //returns 22.34 parseFloat("0908"); //returns 908 parseFloat("blue"); //returns NaNBoolean(""); //false – empty string Boolean("hi"); //true – non-empty string Boolean(100); //true – non-zero number Boolean(null); //false - null Boolean(0); //false - zero Boolean(new Object()); //true – objectNumber(false) // 0 Number(true) //1 Number(undefined) // NaN Number(null) //0 Number( "5.5 ") //5.5 Number( "56 ") //56 Number( "5.6.7 ") //NaN Number(new Object()) //NaN Number(100) //100 var s1 = String(null); //"null" var oNull= null; var s2 = oNull.toString(); //won’t work, causes an errorvar s1 = 123;var s2 = 123+""; //转换为字符串
如果有帮到您,打个赏呗
JavaScript 特有奇葩问题“字符串类型与数字类型混乱”的分析与解决,与类型转换相关推荐
- python数字类型-Python数字类型及其操作
数字类型 Python 语言提供了3种数字类型:整数.浮点数和复数. 布尔型 In addition, Booleans are a subtype of integers. 整数类型(int)与数学 ...
- mysql 数字用什么类型_MySQL数字类型中的三种常用种类
数字类型 MySQL数字类型按照我的分类方法分为三类:整数类.小数类和数字类. MySQL数字类型之一我所谓的"数字类" 就是指 DECIMAL 和 NUMERIC,它们是同一种类 ...
- Linux应用开发3 字符串处理,字符串与其他数字类型的转换,向应用程序传参
标准C库提供的对字符串的处理函数,分为字符串的输入.输出.合并.修改.比较.转换.复制.搜索等几类(ps 越学越像java了) 字符串输入/输出 字符串输出(字符串专用) 常用的字符串输出函数有 pu ...
- Python基本类型之数字类型,字符串
目录 一.数字类型 1.int(整数) 2.float(浮点数) 3.bool(布尔类型) 4.comple(复数类型) 5.数字类型的相互交换 5.1隐式类型 5.2显示类型的转换 二.字符串 1. ...
- 字符串类型转数字类型的几种方法
1. Number() var str1="11",str2="hello",num1 = Number( str1 ),num2 = Number( str2 ...
- 将DataFrame的数字部分由字符串类型转换为数字类型
今天我准备用Excel进行画图的时候,我发现我Excel中的数据无法正常画出,例如: 这是为什么啊,因为这些数据储存的时候,被存为了字符串类型,而不是数字类型,我们可以通过python函数进行数据类型 ...
- python中isdigit函数什么意思_python字符串是否为数字类型-python isdigit函数-isdigit函数 python-python isdigit函数使用-嗨客网...
Python字符串是否是数字教程 在开发过程中,有时候我们需要判断一个 Python isdigit()函数详解 语法 str.isdigit() -> bool 参数 参数 描述 str 表示 ...
- Javascript学习:删除字符串中的数字
可以用字符串replace()和正则表达式结合起来,就能删除混杂在字符串中是数字.例如: var str = '1a2b3c4d5e6f7'; result = str.replace(/[0-9]/ ...
- 使用正则表达式判断字符串是否为数字类型
java 判断字符串是否是数字 1.用JAVA自带的函数 publicstaticbooleanisNumeric(Stringstr){ for(inti=0;i System.out.printl ...
最新文章
- Logback配置文件这么写,TPS提高10倍
- 告诉你一种精简、优化代码的方式
- jQuery EasyUI DataGrid - 格式化列(formatter )
- Appium移动自动化框架原理
- 影子系统、沙箱、虚拟机之间的区别
- python 使用 sorted 对 列表嵌套元组的数据进行排序
- 20189211 《网络攻防》第五周作业
- 通过Dapr实现一个简单的基于.net的微服务电商系统(五)——一步一步教你如何撸Dapr之状态管理...
- VIM学习网址和资料收集
- AI创业营第三期拉开帷幕:生存训练+思想盛宴
- java if else重构_Java编程细节-重构-为什么 if-else 不是好代码
- 华为交换机删除配置命令access_华为交换机基本配置命令详解
- 2019 年(B题)巡线机器人
- python做桌面宠物_如何从零开始制作智能桌宠?
- QSPI FLASH与SD卡同时支持fatfs文件系统
- oracle 获取日期的毫秒_Oracle date timestamp 毫秒 - 时间函数总结(转)
- 云计算如何与企业管理协同作战
- 微信授权扫码点餐-新特性React16
- Linux的命令行无法粘贴
- 关于自我的剖析 —— 认知(面试:你的缺点是什么)
热门文章
- ML之LoRDTRF:基于LoRDT(CART)RF算法对mushrooms蘑菇数据集(22+1,6513+1611)训练来预测蘑菇是否毒性(二分类预测)
- ML之xgboost:利用xgboost算法(自带方式)训练mushroom蘑菇数据集(22+1,6513+1611)来预测蘑菇是否毒性(二分类预测)
- DL之LiRDNNCNN:利用LiR、DNN、CNN算法对MNIST手写数字图片(csv)识别数据集实现(10)分类预测
- ML之XGBoost:XGBoost算法模型(相关配图)的简介(XGBoost并行处理)、关键思路、代码实现(目标函数/评价函数)、安装、使用方法、案例应用之详细攻略
- hyperopt中文文档:Installation-Notes安装说明
- Python-装饰器-案例-获取文件列表
- PyQt4布局管理——绝对定位方式
- POJ 1106 Transmitters(计算几何)
- iphone开发笔记
- MATLAB之GUI学习经典举例