JavaScript 中的 Number.sign()

2024-03-10

想知道是否有任何重要的方法可以找到数字的符号(符号函数 http://en.wikipedia.org/wiki/Signum_function)?
可能比明显的解决方案更短/更快/更优雅

var sign = number > 0 ? 1 : number < 0 ? -1 : 0;

简短的回答!

使用这个,你会安全又快速(来源:moz https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/sign)

if (!Math.sign) Math.sign = function(x) { return ((x > 0) - (x < 0)) || +x; };

您可能想查看性能和类型强制比较fiddle http://jsfiddle.net/disfated/NJFSa/

已经过去很长时间了。进一步主要是历史原因。


Results

目前我们有以下解决方案:


1.明显且快速

function sign(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; }

1.1.修改自kbec /users/854291/kbec- 一种类型铸件更少,性能更高,更短[最快的]

function sign(x) { return x ? x < 0 ? -1 : 1 : 0; }

caution: sign("0") -> 1


2.优雅、简短、不那么快[最慢]

function sign(x) { return x && x / Math.abs(x); }

caution: sign(+-Infinity) -> NaN, sign("0") -> NaN

As of Infinity是 JS 中的合法数字,此解决方案似乎并不完全正确。


3.艺术...但是很慢[最慢]

function sign(x) { return (x > 0) - (x < 0); }

4.使用位移位
快,但是sign(-Infinity) -> 0

function sign(x) { return (x >> 31) + (x > 0 ? 1 : 0); }

5.类型安全[超快]

!似乎浏览器(尤其是 chrome 的 v8)进行了一些神奇的优化,并且该解决方案比其他解决方案性能更高,甚至比 (1.1) 还要高,尽管它包含 2 个额外的操作,并且从逻辑上讲永远不会更快。

function sign(x) {
    return typeof x === 'number' ? x ? x < 0 ? -1 : 1 : x === x ? 0 : NaN : NaN;
}

Tools

  • jsperf http://jsperf.com/signs/3性能测试;
  • fiddle http://jsfiddle.net/disfated/NJFSa/- 类型转换测试;

欢迎改进!


[题外话] 接受的答案

  • 安德烈·塔兰佐夫 /a/14418335/489553- 艺术+100,但遗憾的是它比明显的方法慢了大约 5 倍

  • 弗雷德里克·哈米迪 /a/7624945/489553- 不知何故,这是获得最多支持的答案(在撰写本文时),这有点酷,但恕我直言,这绝对不是应该做的事情。而且它不能正确处理无穷大数字,你知道,它们也是数字。

  • kbec /a/9079549/489553- 是对显而易见的解决方案的改进。虽然不是那么革命性,但综合考虑,我认为这种方法是最好的。投票给他:)


更优雅的快速解决方案版本:

var sign = number?number<0?-1:1:0
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaScript 中的 Number.sign() 的相关文章

  • 查找最近的城市,例如 oodle.com

    因此 我正在尝试开发一个显示用户列表的应用程序 该网站应该检测用户位置 我为此使用 maxmind api 然后显示用户位置 用户指定半径内的城市的列表 我该怎么做呢 MaxMind API 让我可以通过 IP 地址检测用户的城市 但如何找
  • 检查jsonPath中是否有重复的值

    我有一个 jsonPath 如下 book category reference author Nigel Rees title Sayings of the Century price 8 95 category fiction auth
  • 使用 Struts 2.2.x 的简单 JSON 示例?

    我在获取 JSON 结果时遇到问题支柱2 2 1 1 http struts apache org 2 2 1 1 index html 有没有人有一个简单的工作示例 可以使用以下命令将 JSON 结果返回到 JSP支柱2 2 1 1并准备
  • 如何检查 GAS 中是否存在文件(通过 id)

    我知道有关如何检查文件是否存在的问答by name using hasnext 不过我需要检查一下按文件 ID 最好没有高级 Drive API 披露 我写了一个基于错误处理的解决方案 function ifFileExists id tr
  • 进度条摆动效果

    摆动垂直进度条 我学会了如何构建一个整洁的 动态大小的垂直进度条 其中带有横栏这个问题 https stackoverflow com questions 22337851 css vertical progress bar noredir
  • 处理 Javascript 中的浮点精度[重复]

    这个问题在这里已经有答案了 我有大量数值y在 JavaScript 中 我想通过将它们四舍五入到最接近的倍数来对它们进行分组x并将结果转换为字符串 如何解决烦人的浮点精度 例如 0 2 0 4 0 6000000000000001 我尝试过
  • 跟踪嵌套的 ng-repeat 索引

    所以我有一个嵌套的 ng repeat 如下所示 div Index index div Delete me div div Inside index index div div 我希望能够删除我的索引 flowIndex 但是 如果我有这
  • AngularFire 0.9 解决了 UI 路由器问题

    我已按照教程进行操作here https www firebase com docs web libraries angular guide html section routes但不知何故犯了这个错误 Unknown provider c
  • 如何在文本文件中找到最长的 N 行并将其打印到标准输出?

    第一行包含数字 N 的值 后跟多行 我可以按照n 2算法的顺序解决它 有人可以建议一个更好的吗 您可以使用最小堆并在 O n log N 中完成 heap new Min Heap N foreach line in text if len
  • 如何在angularjs中实现类似Excel的过滤器?

    我需要使用 angulajs v 1 为表实现简单的 Excel 类似 Filer 我遇到了困难 请帮助我 我在下面添加了我的代码片段 我想在选中复选框并单击 确定 按钮后在表中显示过滤后的数据 我正在使用模型执行此操作 但没有得到解决方案
  • 如何在 AngularJS 中插入命令或阻止 $http 的 JSONP 自动解析?

    似乎我发现的关于 http 或 angularjs 的几乎每个问题或解释通常都假设您可以修改请求的响应 我不能这样做 而且我得到的响应格式错误 根据 AngularJS 解析器 它的格式错误一致 因此我可以在解析纯文本之前修改它来解决问题
  • 使用 jquery deferreds 处理可变数量的 ajax 请求

    当我有可变数量的 ajax 请求时 如何使用 deferreds 调用它们 我猜 qty of gets 3 function getHTML productID qty of gets var dfd Deferred i 0 c 0 t
  • 跨源资源共享中 this.withCredentials 属性的问题

    我们正在实现一个基于 AngularJS 的应用程序 该应用程序使用托管在不同域中的 REST Web 服务 以下脚本用于 CORS 它在 Chrome 和 FireFox 上完美运行 在 IE9 和 Safari 中进行身份验证时存在问题
  • JavaScript 文件中的代码如何获取文件的 URL?

    我需要将 CSS 样式表动态加载到位于不同的领域 如何获取 JS 文件的完整 URL 以在href样式表的属性 例如 结构如下 http bla com js script js http bla com css style css 我想将
  • 与 jQuery 配合使用的backbone.js 替代品?

    有没有像backbone js这样的东西的替代品 它为你的前端javascript提供了一些框架 结构 但没有任何不需要的依赖项 并且与jQuery更紧密地结合在一起 您需要一个易于使用的 MVC 框架吗 因为Sammy js http s
  • 如何使用 Twitter Bootstrap API 检测您正在使用哪个设备视图?

    我刚刚开始为我即将开展的项目使用 Twitter Bootstrap API 主导航包含 3 个主要元素 site nav 社交链接导航 搜索网站表格 在移动设备上查看网站时 我使用折叠插件折叠网站导航和搜索表单 移动视图有 2 个按钮 单
  • 找到与另一个子集和匹配的最小子集和

    我有一个现实世界的问题 不是家庭作业 需要找到集合 A 的子集之和等于其他集合 B 的子集之和 一个非常相似的问题 有一个有用的答案is here https stackoverflow com questions 443712 algor
  • 现在的浏览器真的不隐藏javascript吗?

    这不是重复的这个问题 https stackoverflow com questions 822872 do web sites really need to cater for browsers that dont have javasc
  • 编辑距离(Levenshtein距离)递归自上而下实现的复杂性

    I have been working all day with a problem which I can t seem to get a handle on The task is to show that a recursive im
  • 在进程注册后显示 div,woocommerce

    在网站注册过程后 我想显示一个隐藏的div div 位于同一页面中 但注册后 页面将加载并显示相同的页面 这是表单处理程序 php public static function process registration nonce valu

随机推荐

  • 在 WPF 中创建侧边栏 - 像 Windows 桌面应用程序一样的弹出窗口

    我想做的是在 WPF 中创建一个桌面应用程序 其 UI 是这样的 一个小图标将保持固定在屏幕左边缘的中心 单击 或悬停 时将滑动打开一个侧边栏 如谷歌 桌面栏 沿着屏幕左边缘运行 固定位置 无法移动 请注意 我要求的可能类似于应用程序栏 但
  • 如何让 Bower 构建包?

    有没有办法让 Bower 在从 GitHub 克隆后运行包 grunt 我正在尝试使用 Bower 但我使用的软件包之一是 Bootstrap 扩展 x editable 问题是 虽然其他软件包将完整构建的版本推送到 github 所以当
  • AWS with .NET - 从 CloudWatch 读取日志 - 没有返回日志数据

    我正在尝试使用 NET 从 CloudWatch 读取使用 SNS 发送的消息的日志数据 从 CloudWatch 控制台 CloudWatch CloudWatch Logs Logs Insights 我输入 Date range cu
  • unity3d中的屏幕录制

    unity如何进行屏幕录制 我想在运行游戏时录制屏幕 游戏玩法 那应该是 play stop replay 从设备本地保存录音 从我的设备打开 加载 我们已经录制了 在我的游戏中 一台可以捕获本机相机的相机和一台 3D 模型 我希望记录两者
  • 原则 2 没有要处理的元数据类

    我已经将 zf 1 与原则 2 集成 我通过以下方式创建了实体 phpology php orm convert mapping force from database 注释 C wamp www ip application models
  • 存储星期几和时间?

    我有一个关于在数据库中存储星期几和时间的两部分问题 我正在使用 Rails 4 0 Ruby 2 0 0 和 Postgres 我有某些活动 并且这些活动都有时间表 例如 对于 跳伞 活动 我可能会在周二 周三和下午 3 点进行 有没有办法
  • SSDT 项目中带有 UDF 和视图的数据库参考

    遇到一个奇怪的问题 假设一个空解决方案中有两个数据库项目 Bart 和 Homer 巴特已被添加为荷马的数据库参考 Bart项目定义了一个函数 CREATE FUNCTION dbo Message RETURNS NVARCHAR 255
  • Git 分离头问题

    我今天读了很多与此问题相关的帖子 这里有一篇有用的帖子 修复 Git 分离头 https stackoverflow com questions 10228760 how to fix a git detached head 为什么我的 G
  • 如何在 Bootstrap 4 中将卡片居中?

    我正在使用 bootstrap 4 alpha 3 我想将卡片水平居中在页面中间 Preview link http codepen io vaibhavsingh97 full VjRAXW http codepen io vaibhav
  • 获取 BorderPane 中中心空间的宽度和高度 (JavaFX 2)

    我有一个简单的BorderPane实例是我的根节点Scene 边框窗格的右侧有一个面板 带有一些 GUI 控件 包括一个按钮 当我单击此按钮时 我创建了一个类的实例 Foo 延伸StackPane我把这个实例作为边框窗格的中心节点 我想获取
  • 检查小部件级别的错误和其他值 - 可能使用自定义表单字段

    如果某个字段在小部件级别出现错误 我该如何访问 使用默认值我尝试过 if widget attributes has errors or if widget has errors 但不工作 我使用自定义小部件模板 我正在考虑使用自定义表单字
  • .htaccess 中的条件 SetEnv?

    是否可以根据主机名在 htaccess 文件中设置不同的 SetEnv 变量 例如 我需要我的 htaccess文件具有以下值 SetEnv PYRO ENV production 在生产盒上 以及 SetEnv PYRO ENV stag
  • PHP $_SERVER[‘SERVER_ADDR’] 变量始终返回 127.0.0.1

    我们有多个负载平衡的 Web 服务器机器运行相同的 PHP Web 应用程序 LAMP http en wikipedia org wiki LAMP software bundle 并且我想在每个服务器上运行稍微不同的代码 用于测试目的
  • Ajax post serialize() 不包含按钮名称和值

    我的 ajax 没有序列化按钮名称和值 我有一个非常简单的表格 它有一个按钮和一个文本框
  • 超时已过。操作完成前超时时间已过或服务器未响应

    我不确定这是 VB NET 错误还是 SQL Server 错误 但我通过以下堆栈跟踪得到上述错误 SqlException 0x80131904 超时 已到期 超时时间已过 在操作完成之前 或者服务器没有响应 System Data Sq
  • Java Swing JTextArea 不工作

    我正在开发一款游戏 在此部分中 将打开一个新窗口来显示游戏说明 唯一的问题是 当 txt 文件超过 20 行时 JTextArea 只显示一行 我是这方面的新手 所以我不确定我错过了什么 谢谢 class Instruction exten
  • 如何使用 MediaRecorder 在 Android 中录制原始 AAC 音频文件? AAC_ADTS 不起作用

    我正在使用 Android MediaRecorder 录制 AAC 编码的音频文件 将输出格式设置为 MPEG 4 效果很好 但由于我的音频播放器既不支持 MPEG 4 也不支持 3GP 我尝试使用输出格式获取原始 AAC 文件AAC A
  • 如何在 REPL 中重新加载 clojure 文件

    无需重新启动 REPL 即可重新加载 Clojure 文件中定义的函数的首选方法是什么 现在 为了使用更新的文件 我必须 edit src foo bar clj 关闭 REPL 打开 REPL load file src foo bar
  • 为什么 ViewController 内的 tableView 的 reloadData 显示错误?

    我在视图控制器中有一个 tableView 但是 reloadData 不适用于 tableView Xcode 显示错误 thread1 exc bad instruction 我尝试将 reloadData 分配给其他方法 但结果是相同
  • JavaScript 中的 Number.sign()

    想知道是否有任何重要的方法可以找到数字的符号 符号函数 http en wikipedia org wiki Signum function 可能比明显的解决方案更短 更快 更优雅 var sign number gt 0 1 number