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

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(使用前将#替换为@)

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

  • 使用 AJAX 来回发送信息

    使用 post 你可以向服务器发送信息 但是当你需要从服务器接收信息时怎么办呢 信息如何从可以由 php 变量保存的方式变为可以由 javascript 变量保存的方式 反之亦然 这与您的问题更相关 http docs jquery com
  • 使用 HTML5 FileSystem API 将文件写入桌面

    我正在玩一下文件系统API http www html5rocks com en tutorials file filesystem 我发现了很多生成下载链接并让用户以 浏览器方式 下载文件的示例 我想知道两件事 有没有办法将fiddle中
  • 使用最新 Ember Data 版本中的 RESTSerializer 格式化 JSON

    我正在努力将我的 JSON munge 成正确的格式 为了说明这一点 我做了一个快速的 JSfiddle http jsfiddle net chrismasters NQKvy 638 http jsfiddle net chrismas
  • 从 HTML 表单发送数据到 Node.js 服务器

    我正在学习 Node js 我的服务器中有这个 var http require http var url require url http createServer function request response response w
  • Yeoman-Angular 生成的应用程序中缺少 Angular 脚本

    我已经使用 Yeoman Angular Generator 生成了一个应用程序 但项目中缺少 angular js 和其他 Angular 文件 我可以在 Bower json 文件中看到这些依赖项 如下所示 name mi portfo
  • Jqplot 中两个系列数据的不同颜色条

    我想知道如何在 Jqplot 中为两个系列制作不同的颜色条 如果我只有一个系列数据 它的工作原理如下图所示 红色和绿色基于其值 但是 如果我有两个系列数据 我无法为每个系列数据配置两个系列颜色 目前我只能做这个图 我希望两个系列图可以根据其
  • JS如何获取多维数组的最大深度?

    我有一个多维数组 我想知道它的最大深度 我发现了这个灵魂 但它不适用于对象数组 const getArrayDepth arr gt return Array isArray arr 1 Math max arr map getArrayD
  • 将 FBX 文件转换为 .gltf 后,模型非常小,为什么?

    问题 将 FBX 文件转换为 gltf 后 模型非常小 为什么 我尝试用以下方法缩放模型frontObject scale set 1000 1000 1000 但我收到以下错误 TypeError Cannot read property
  • TypeScript 中类和命名空间的区别

    到底有什么区别classes and namespaces在打字稿中 我知道 如果您创建一个带有静态方法的类 您可以在不实例化该类的情况下访问它们 这正是我猜想的命名空间的要点之一 我还知道你可以创建多个同名的命名空间 并且它们的方法在编译
  • 向下滚动时如何使图像移动?

    这是我想要实现的目标的示例 https www flambette com en https www flambette com en 我尝试过更改图像的 css 属性 但效果不能满足我的需求 我尝试过以下代码 mydocument on
  • 如何在 Jest 测试中模拟 StatusBarManager.getHeight?

    我正在使用 expo 34 并且反应本机用户界面库 https www npmjs com package react native ui lib来自 wix 并且在为我的组件设置笑话测试时遇到问题 问题看起来出现在link https g
  • 通过电子邮件发送在 HTML5 画布上创建的图像

    我有一个画布 用户可以通过交互来更改设计 现在 用户完成更改后 可以提交他的设计及其电子邮件 ID 但为了提交设计 我使用以下方法将画布转换为图像http www nihilogic dk labs canvas2image http ww
  • 自动调整元素 (div) 大小以适合水平内容

    我尝试谷歌搜索 但没有得到太多结果 我正在构建一个水平轮播 它在浮动的 LI 中显示图像 我想解决的问题是 每次我向轮播添加缩略图 我是延迟加载 时 我都需要重新计算轮播的宽度 以便所有浮动缩略图很好地并排排列 其一 我宁愿不必在 JS 中
  • 是否可以从 webpack 中的文件名中删除特殊字符?

    长话短说 我的资产文件名中不能包含某些字符 例如连字符 我没有运气通过解析 webpack 文档来弄清楚是否可以使用正则表达式或类似的东西重命名文件 这样我就可以从我无法控制源文件名的 3rd 方包中删除任何连字符 我的超级天真的例子是这样
  • 如何在javascript中解析 yyyy-MM-dd HH:mm:ss.SSS 格式的日期?

    const time 2016 11 16 00 00 00 000 const date new Date time console info date 似乎 safari 无法解析 yyyy MM dd HH mm ss SSS 格式日
  • 更改 CSS 样式表的选择器属性

    以下是我们传统上如何更改重复元素的样式 将样式应用到每个元素 function changeStyle selector prop val var elems document querySelectorAll selector Array
  • 在64位环境中加载32位进程

    我有以下几个问题 CHM 是 编译的 HTML 文件 我的 CHM 文件有一个启动 32 位应用程序的链接 CHM 文件是用 Javascript 编码的 这在 32 位操作系统环境中运行良好 但这在 64 位操作系统环境中不起作用 原因是
  • 如何制作饼图聚合数据源?

    Using 适用于 ASP NET MVC 的 Kendo UI 完整版 http www kendoui com 版本 2013 3 1119 2013年11月20日 如果我有这段代码 status chart kendoChart da
  • ES6解构对象赋值函数参数默认值

    您好 我正在查看在传递函数参数时使用对象解构的示例对象解构演示 https developer mozilla org en US docs Web JavaScript Reference Operators Destructuring
  • 相当于 JavaScript 中 Ruby 的each_cons

    许多语言都曾提出过这个问题 但 javascript 却没有 Ruby 有方法Enumerable each cons https devdocs io ruby 2 5 enumerable method i each cons看起来像这

随机推荐

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