You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ruby on Rails与JS:如何根据JSON的toll值控制谷歌地图标记显示?

解决JSON字符串布尔值的判断问题

嘿,我懂你遇到的困扰了!问题出在后端返回的toll是字符串类型的"true"/"false",但你用布尔值true去做比较,JavaScript的类型转换规则在这里坑了你。

为什么原来的判断不生效?

在JS里,当你用==比较字符串和布尔值时,会触发隐式类型转换:

  • 布尔值true会被转换成数字1
  • 字符串"true"尝试转换成数字时会得到NaN
  • 最后NaN == 1的结果是false,所以你的条件永远不会成立,标记自然加不上。

前端层面的快速解决方案

直接和字符串值做比较,推荐用严格相等===(避免意外的类型转换):

if (pis.toll === "true") { 
  addMarker(this); 
}

如果想让代码可读性更好,可以先把字符串转成布尔值再判断:

const hasToll = pis.toll === "true";
if (hasToll) {
  addMarker(this);
}

后端层面的优化方案(更优雅)

如果可以修改Ruby on Rails控制器,直接把toll字段转换成布尔类型返回,这样前端就能用原来的布尔值判断逻辑了:

  1. 如果你用序列化器(比如Active Model Serializers),可以指定字段类型:
class YourModelSerializer < ActiveModel::Serializer
  attribute :toll, type: :boolean
end
  1. 如果直接在控制器里构造JSON,可以手动转换:
def your_action
  data = YourModel.all.map do |item|
    # 假设数据库里toll是字符串类型,转成布尔值
    item.attributes.merge(toll: item.toll == "true")
  end
  render json: data
end

这样前端拿到的JSON里toll就是真正的布尔值true/false,原来的if (pis.toll == true)就能正常工作了。

内容的提问来源于stack exchange,提问作者Felipe Marcon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:50:38