字符串类型与数字类型的混乱,应该是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 特有奇葩问题“字符串类型与数字类型混乱”的分析与解决,与类型转换相关推荐

  1. python数字类型-Python数字类型及其操作

    数字类型 Python 语言提供了3种数字类型:整数.浮点数和复数. 布尔型 In addition, Booleans are a subtype of integers. 整数类型(int)与数学 ...

  2. mysql 数字用什么类型_MySQL数字类型中的三种常用种类

    数字类型 MySQL数字类型按照我的分类方法分为三类:整数类.小数类和数字类. MySQL数字类型之一我所谓的"数字类" 就是指 DECIMAL 和 NUMERIC,它们是同一种类 ...

  3. Linux应用开发3 字符串处理,字符串与其他数字类型的转换,向应用程序传参

    标准C库提供的对字符串的处理函数,分为字符串的输入.输出.合并.修改.比较.转换.复制.搜索等几类(ps 越学越像java了) 字符串输入/输出 字符串输出(字符串专用) 常用的字符串输出函数有 pu ...

  4. Python基本类型之数字类型,字符串

    目录 一.数字类型 1.int(整数) 2.float(浮点数) 3.bool(布尔类型) 4.comple(复数类型) 5.数字类型的相互交换 5.1隐式类型 5.2显示类型的转换 二.字符串 1. ...

  5. 字符串类型转数字类型的几种方法

    1. Number() var str1="11",str2="hello",num1 = Number( str1 ),num2 = Number( str2 ...

  6. 将DataFrame的数字部分由字符串类型转换为数字类型

    今天我准备用Excel进行画图的时候,我发现我Excel中的数据无法正常画出,例如: 这是为什么啊,因为这些数据储存的时候,被存为了字符串类型,而不是数字类型,我们可以通过python函数进行数据类型 ...

  7. python中isdigit函数什么意思_python字符串是否为数字类型-python isdigit函数-isdigit函数 python-python isdigit函数使用-嗨客网...

    Python字符串是否是数字教程 在开发过程中,有时候我们需要判断一个 Python isdigit()函数详解 语法 str.isdigit() -> bool 参数 参数 描述 str 表示 ...

  8. Javascript学习:删除字符串中的数字

    可以用字符串replace()和正则表达式结合起来,就能删除混杂在字符串中是数字.例如: var str = '1a2b3c4d5e6f7'; result = str.replace(/[0-9]/ ...

  9. 使用正则表达式判断字符串是否为数字类型

    java 判断字符串是否是数字 1.用JAVA自带的函数 publicstaticbooleanisNumeric(Stringstr){ for(inti=0;i System.out.printl ...

最新文章

  1. Logback配置文件这么写,TPS提高10倍
  2. 告诉你一种精简、优化代码的方式
  3. jQuery EasyUI DataGrid - 格式化列(formatter )
  4. Appium移动自动化框架原理
  5. 影子系统、沙箱、虚拟机之间的区别
  6. python 使用 sorted 对 列表嵌套元组的数据进行排序
  7. 20189211 《网络攻防》第五周作业
  8. 通过Dapr实现一个简单的基于.net的微服务电商系统(五)——一步一步教你如何撸Dapr之状态管理...
  9. VIM学习网址和资料收集
  10. AI创业营第三期拉开帷幕:生存训练+思想盛宴
  11. java if else重构_Java编程细节-重构-为什么 if-else 不是好代码
  12. 华为交换机删除配置命令access_华为交换机基本配置命令详解
  13. 2019 年(B题)巡线机器人
  14. python做桌面宠物_如何从零开始制作智能桌宠?
  15. QSPI FLASH与SD卡同时支持fatfs文件系统
  16. oracle 获取日期的毫秒_Oracle date timestamp 毫秒 - 时间函数总结(转)
  17. 云计算如何与企业管理协同作战
  18. 微信授权扫码点餐-新特性React16
  19. Linux的命令行无法粘贴
  20. 关于自我的剖析 —— 认知(面试:你的缺点是什么)

热门文章

  1. ML之LoRDTRF:基于LoRDT(CART)RF算法对mushrooms蘑菇数据集(22+1,6513+1611)训练来预测蘑菇是否毒性(二分类预测)
  2. ML之xgboost:利用xgboost算法(自带方式)训练mushroom蘑菇数据集(22+1,6513+1611)来预测蘑菇是否毒性(二分类预测)
  3. DL之LiRDNNCNN:利用LiR、DNN、CNN算法对MNIST手写数字图片(csv)识别数据集实现(10)分类预测
  4. ML之XGBoost:XGBoost算法模型(相关配图)的简介(XGBoost并行处理)、关键思路、代码实现(目标函数/评价函数)、安装、使用方法、案例应用之详细攻略
  5. hyperopt中文文档:Installation-Notes安装说明
  6. Python-装饰器-案例-获取文件列表
  7. PyQt4布局管理——绝对定位方式
  8. POJ 1106 Transmitters(计算几何)
  9. iphone开发笔记
  10. MATLAB之GUI学习经典举例