在页面上显示的整数,为什么在js中打印为string类型?

页面上有表格显示一个显示一些数字,在后台判断时,需要判断280和2320的大小关系,明明是前者小于后者,但是却判断为条件前者大于后者。然后我打印了下这2个数字的类型,发现都是string,请问下这是什么原因呢?如图:
图片描述

console.log("280變量類型:"+typeoffee_actpaid));
console.log("2320變量類型:"+typeof(fee_unpaid));
console.log("320變量類型:"+typeof(320));

图片描述

我使用jqueryDe $.each()遍历出来的。

$.each([1,2,3],function(index,value){
    console.log(typeof(value));
});

图片描述

阅读 3.6k
5 个回答

可以用隐式转换的方式将string转为number

var k = "123";   //String类型 
var k = +k       //Number类型

js访问dom,并从dom中取出的数据,都是string类型。

fee_unpaid变量你是怎么取的?

  • jQuery里面,从DOM里取出来的东西(DOM内容)都是字符串格式的

  • jQuery里面,只有DOM本身属性,设计到宽高位置、序号、个数之类的,取出来的值才是数字

  • 至于为何280和2320比较,前者大,这要从JS比较的方式说起:

    • 这两个值,其中至少有一个是字符串(由于是jQuery从DOM里取出来的内容)

    • 如果其中有一个是字符串,而另外一个不是,则会把不是字符串的转成字符串

    • 所以,实际上只要其中有一个字符串,这就成了字符串和字符串比较

    • 字符串相比,是从前到后判断ASCII码的,直到对应位置上某个ASCII码不一致

    • '280'第一位'2''2320'第一位'2'相等,比较第二位

    • '280'第二位'8'的ASCII码大于'2320'第二位'3',所以字符串'280'

  • 如果你需要比较数字大小,先需要将两个字符串转换成数字,下面有几种比较简单的转换方法:

    • parseInt(x)(转成整数)或parseFloat(x)(转成浮点数)

    • Math.round(x)(四舍五入)

    • +x(转成数字)

两个字符串比较
从左到右一个个比较
'280'和'2320'
先比较'2'.charCodeAt()相等
在比较'8'.charCodeAt()与'3'.charCodeAt()
'280'较大。结束比较返回结果

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题