今天被JavaScript的String型和数字型的+运算撞了一下腰。

简介: 今天被JavaScript的String型和数字型的+运算撞了一下腰。

今天被JavaScript的String型和数字型的+运算撞了一下腰。

 

 从url

 

 http://www.test.com/test.asp?ipageno=12

 

 中取得iPageNo=12,本来是要跳转到iPageNo+1页,即13页,但实跳上却跳转到了121页,即iPageNo+1的结果是121。

 

 为什么会这样呢?

 

 写了下面的测试代码:

<mce:script language="javascript"><!--
var  iPageNo = "12";
document.write("var iPageNo =/"12/";<BR><BR>");
var a1= 1 + iPageNo;
var a2= iPageNo + 1;
var b1= 1 - iPageNo;
var b2= iPageNo - 1;
document.write("typeof(1 + iPageNo)= " + typeof(a1) + ",   1 + iPageNo = " + a1);
document.write("<BR><BR>");
document.write("typeof(iPageNo + 1)= " + typeof(a2) + ",   iPageNo + 1 = " + a2);
document.write("<BR><BR>");
document.write("typeof(1 - iPageNo)= " + typeof(b1) + ",   1 - iPageNo = " + b1 );
document.write("<BR><BR>");
document.write("typeof(iPageNo -1 )= " + typeof(b2) + ",   iPageNo - 1 = " + b2);
document.write("<BR><BR>");
iPageNo = 12;
document.write("iPageNo = 12;<BR><BR>");
var a1= '1' + iPageNo;
var a2= iPageNo + '1';
var b1= 1 - iPageNo;
var b2= iPageNo - '1';
document.write("typeof('1' + iPageNo) = " + typeof(a1) + ",    '1' + iPageNo = " + a1);
document.write("<BR><BR>");
document.write("typeof(iPageNo + '1') = " + typeof(a2) + ",    iPageNo + '1' = " + a2);
document.write("<BR><BR>");
document.write("typeof('1' - iPageNo) = " + typeof(b1) + ",    '1' - iPageNo = " + b1);
document.write("<BR><BR>");
document.write("typeof(iPageNo - '1') = " + typeof(b2) + ",    iPageNo - '1' = " + b2);
// --></mce:script>

运行结果是:

 

var iPageNo ="12";

typeof(1 + iPageNo)= string, 1 + iPageNo = 112

typeof(iPageNo + 1)= string, iPageNo + 1 = 121

typeof(1 - iPageNo)= number, 1 - iPageNo = -11

typeof(iPageNo -1 )= number, iPageNo - 1 = 11

iPageNo = 12;

typeof('1' + iPageNo) = string, '1' + iPageNo = 112

typeof(iPageNo + '1') = string, iPageNo + '1' = 121

typeof('1' - iPageNo) = number, '1' - iPageNo = -11

typeof(iPageNo - '1') = number, iPageNo - '1' = 11

 

可见:

 

 当String型和数字型进行+运算时,数字型会自动转换成String型,结果也是String型。

 当String型和数字型进行-运算时,String型会自动转换成数字型,结果也是数字型。

 

由于从url中取得的iPageNo值的类型是String,所以

iPageNo + 1 = "12" + 1 = "12" + "1" = "121"

 

 

所以,要从Url中获取数字型数据,要用Number()强制转换一下类型。


相关文章
|
2月前
|
JavaScript 前端开发
JS浮点数精度问题及高精度小数运算:BigNumber解决方案
JS浮点数精度问题及高精度小数运算:BigNumber解决方案
202 0
|
1月前
|
JavaScript 前端开发 开发者
|
2月前
|
存储 JavaScript 前端开发
JavaScript 字符串(String) 对象
JavaScript 字符串(String) 对象
48 3
|
3月前
|
JavaScript 前端开发 Python
JavaScript写个.ts视频文件Url生成器,使用了string.padStart
JavaScript写个.ts视频文件Url生成器,使用了string.padStart
|
3月前
|
JavaScript 前端开发 API
javaScript中常用的String方法以及注意点总结
本文总结了JavaScript中常用的String对象的方法及其注意事项,包括大小写转换、字符获取、子字符串截取、字符串拼接、去除空格、替换、分割以及查找字符串中字符的索引等操作。提供了每种方法的使用示例代码,帮助理解它们的具体用法和差异。
44 2
|
4月前
|
JavaScript 算法 前端开发
JS算法必备之String常用操作方法
这篇文章详细介绍了JavaScript中字符串的基本操作,包括创建字符串、访问特定字符、字符串的拼接、位置查找、大小写转换、模式匹配、以及字符串的迭代和格式化等方法。
JS算法必备之String常用操作方法
|
4月前
|
JavaScript 前端开发
JavaScript基础&实战(5)js中的数组、forEach遍历、Date对象、Math、String对象
这篇文章介绍了JavaScript中的数组、Date对象、Math对象以及包装类(String、Number、Boolean),并详细讲解了数组的创建、方法(如forEach、push、pop、unshift、slice、splice)和遍历操作,以及工厂方法创建对象和原型对象的概念。
JavaScript基础&实战(5)js中的数组、forEach遍历、Date对象、Math、String对象
|
4月前
|
安全 编译器 C++
【剑指offer】2.2编程语言(p22-p25)——面试题1:string赋值运算函数
【剑指offer】2.2编程语言(p22-p25)——面试题1:string赋值运算函数
|
6月前
|
JavaScript 前端开发 索引
JavaScript有7个数据类型:Number, String, Boolean, Null, Undefined, Symbol(BES6)和BigInt(ES10)组成基本类型
【6月更文挑战第25天】JavaScript有7个数据类型:Number, String, Boolean, Null, Undefined, Symbol(BES6)和BigInt(ES10)组成基本类型,而Object包括Array、Function等是引用类型。Objects可以包含键值对,Array是特殊的Object。Functions也是对象。`null`和`undefined`被视为特殊的原始值。
57 1
|
7月前
|
JavaScript
js 字符串String转对象Object
该代码示例展示了如何将一个以逗号分隔的字符串(`&#39;1.2,2,3,4,5&#39;`)转换为对象数组。通过使用`split(&#39;,&#39;)`分割字符串并`map(parseFloat)`处理每个元素,将字符串转换成浮点数数组,最终得到一个对象数组,其类型为`object`。
375 2
下一篇
DataWorks