告诉我的库函数的用户传递的变量类型不正确的最佳方法是什么

2023-12-29

我目前正在创建一个 javascript 函数库。主要供我自己使用,但你永远无法确定其他人最终是否会在他们的项目中使用它,我至少会创建它,就好像这可能发生一样。
大多数方法仅在传递的变量具有正确的数据类型时才有效。现在我的问题是:提醒用户变量类型不正确的最佳方法是什么?应该抛出这样的错误吗?

function foo(thisShouldBeAString){ //just pretend that this is a method and not a global function
 if(typeof(thisShouldBeAString) === 'string') {
  throw('foo(var), var should be of type string');
 }
 #yadayada
}

我知道 javascript 会进行内部类型转换,但这可能会产生非常奇怪的结果(即 '234' + 5 = '2345' 但 '234' * 1 = 234),这可能会使我的方法做非常奇怪的事情。

EDIT
为了让事情更加清楚:我不想进行类型转换,传递的变量应该是正确的类型。告诉我的库的用户传递的变量类型不正确的最佳方法是什么?


类型检查的问题在于它实际上很难做到。例如:-

var s = new String("Hello World!");
alert(typeof s);

什么会收到警报?答:“对象”。确实,这是一种愚蠢的初始化字符串的方法,但我仍然经常看到它。我更喜欢在必要时尝试转换,或者什么也不做。

话虽如此,在我拥有完全控制权的 Javascript 环境中(即not如果您只是提供一个库,则为 true)我使用这组原型调整:-

String.prototype.isString = true;
Number.prototype.isNumber = true;
Boolean.prototype.isBoolean = true;
Date.prototype.isDate = true;
Array.prototype.isArray = true;

因此,对常见类型的测试可以非常简单:

if (x.isString)

尽管你仍然需要注意 null/undefined:-

if (x != null && x.isString)

除了避免new String("thing")问题是,这种方法在日期和数组上尤其有用。

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

告诉我的库函数的用户传递的变量类型不正确的最佳方法是什么 的相关文章

随机推荐

  • 用有限的资金扩展 YouTube API 配额

    通过一个简单的 java 程序 我使用以下命令发送 GET 请求YouTube 数据 API https developers google com youtube v3 具体来说视频列表 https developers google c
  • 将 LocalDateTime 转换为日期

    我有一个字符串日期 我用下面的语句将其转换 LocalDateTime datetime LocalDateTime parse rs getString DateIn DateTimeFormatter ofPattern yyyy MM
  • 来自网络工作者的 setTimeout

    如果我想在无法继续处理数据的情况下暂停 Web Worker 然后稍后再尝试 该怎么办 我可以在网络工作者中以这种方式做到这一点吗 var doStuff function if databaseBusy setTimeout doStuf
  • “unicode”对象没有属性“keys”

    我在 ebextensions 目录中添加 config 以在 Elastic Beanstalk 下管理的 Amazon Linux 中安装 imagemagick 包时遇到严重问题 我用了 packages yum ImageMagic
  • @IBAction 只是 Swift 中的一种语法还是 @Something 在 Swift 中意味着特定的事物?

    IBAction 只是 Swift 中的语法差异还是它表示特定的东西 此外 在编写 UIApplicationMain 的 AppDelegate swift 中也可以看到类似的用法 这些都是attributes在 swift 中 它们对编
  • 如何使用 GetThemeStream 保存 Windows 主题部分? (DWWINDOWS 除外)

    我想使用特定状态保存主题部分的原始 PNG BMP 32 位 带 alpha GetThemeStream https msdn microsoft com en us library windows desktop bb759768 v
  • 32 位 Oracle 客户端的 SSRS 报告无法在 64 位环境中工作

    我有一个在 BIDS 2008 中使用 32 位 Oracle 客户端构建的 SSRS 报告 报告在 BIDS VS 2008 中运行良好 但是当部署到 Win2k3 64 位服务器上的报告管理器时 它失败并出现以下错误 尝试加载 Orac
  • 如何手动设置在应用程序委托中显示哪个故事板视图

    我有一个应用程序 只要应用程序在一段时间内处于非活动状态 就希望注销用户 应用程序中有多个不同的视图 我希望应用程序委托在触发此方法时将登录视图设置为当前视图 void applicationDidBecomeActive UIApplic
  • Postgres 8.4.4(Win7 x64 上的 x32)小表上的更新速度非常慢

    我有一个非常简单的更新语句 UPDATE W SET state thing WHERE state NOT IN this that AND losttime lt CURRENT TIMESTAMP 表 W 只有 90 行 每行的丢失时
  • Jmeter - 如何基于“jar”文件循环数据

    我想创建一个场景 将 jar 文件中的数据使用到 Jmeter 循环逻辑中 我的罐子看起来像 public String Australia String a location lat 33 8669710 lng 151 1958750
  • BlackBerry - 如何设置应用程序图标?

    我需要为我的应用程序设置一个图标 当焦点位于该特定应用程序时 该图标必须更改 请参阅项目 gt 属性 gt BlackBerry 项目属性 gt 资源 要动态更改图标 请参阅在 BlackBerry JDE 4 5 0 的状态栏添加通知图标
  • 正在继续下载

    这个想法很简单 我正在创建一个服务 用户可以在其中放置托管在另一个网站上的文件的直接链接 我的程序将打开到该远程服务器的流并开始以字节为单位读取文件 然后返回每个读取的文件字节给用户 到目前为止 我设法让它工作 这是我的代码 public
  • 当一系列数字变为负数时确定单元格 ID 的 Excel 公式

    样本数据 A B 1 Date Amount 2 Apr 1 6 000 3 May 1 4 250 4 June 1 2 750 5 July 1 1 000 6 Aug 1 0 075 lt This Cell Row 7 Sept 1
  • 如何从 WooCommerce 获取所有结帐字段?

    我喜欢获取所有可用的结账字段 包括第三方的 fields WC gt checkout gt checkout fields 返回致命错误 Fatal error Call to a member function get country
  • 无法创建 sessionFactory 对象.org.hibernate.HibernateException

    您好 我是 hibernate 框架的新手 当我运行 hibernate 示例示例代码时 如果互联网连接可用 它工作正常 如果互联网连接不可用 则它无法工作 并给出如下错误 log4j WARN No appenders could be
  • 高效的用户界面

    速度和易学性并不直接相互对抗 但设计这样一个缺少其中之一 或两者 的 GUI 似乎很容易 大多数时候 GUI 设计者似乎更喜欢 易于学习 即使 快速应用 更为明智 只有少数 UI 概念或程序注重最大限度地提高您使用该程序所做的任何操作的最高
  • C++ 中整数异或的可能结果

    是否保证 2 32 34 在 C 20 中 是的 就是这样 expr xor http eel is c draft expr xor定义它 Given the coefficients xi and yi of the base 2 re
  • Git 归咎于重组的 SVN 存储库

    git blame没有向我显示布局已重新组织的 SVN 存储库的所有历史记录 我正在使用 git svn 访问 SVN 存储库 SVN 存储库过去的结构具有巨大的文件夹树来保存许多项目 去年 我重新组织并将布局扁平化为更标准的主干 标签 分
  • JFrame 和 JPanel 问题

    我正在尝试为当地一家销售糕点 百吉饼和咖啡的百吉饼店制作一个程序 我在实现 JFrame 中制作的面板时遇到问题 任何帮助理解如何使我的 JFrame 看起来像这样都会有帮助http kepler covenant edu COS150 B
  • 告诉我的库函数的用户传递的变量类型不正确的最佳方法是什么

    我目前正在创建一个 javascript 函数库 主要供我自己使用 但你永远无法确定其他人最终是否会在他们的项目中使用它 我至少会创建它 就好像这可能发生一样 大多数方法仅在传递的变量具有正确的数据类型时才有效 现在我的问题是 提醒用户变量