为什么这不能是一个原始的?

2024-03-26

我正在摆弄 JavaScript,并注意到this永远不可能是原始的。我在说什么?让我解释。

以这个函数为例。

function test(){
    return typeof this;
}
test.call('Abc'); // 'object'
test.call(123); // 'object'

他们都'object', not 'string' or 'number',正如我所料。

经过一番混乱(并搞乱instanceof),我明白发生了什么事。'Abc'正在转换为String对象,以及123正在转换为Number object.

无论如何,我的问题是为什么会发生这种情况,以及如何将对象转换回其原始对象?

我知道我可以使用(String)this or (Number)this,但是如果我不知道类型怎么办?

EDIT: 我试图这样做:

function element(){
    var $e = $(this),
    $d = $e.closest('div');
}
element.call('#myID');

但它不起作用。this is a String对象,而 jQuery 只是创建了对象的集合,而不是使用选择器来搜索 DOM。


正如其他人指出的那样,它根据规范被强制为一个对象。

需要注意的重要一点是,如果您在严格模式,强制不会发生。

"use strict";

function test(){
    return typeof this;
}
test.call('Abc'); // 'string'
test.call(123); // 'number'

所以真正的问题是你为什么不使用严格的? ;-)


正如您在评论中指出的,您应该能够使用.valueOf()如果您支持不支持严格模式的实现。

如果您只期望一个字符串,或者如果您也期望一个数字,但您不介意数字字符串,那么您可以这样做......

(this + '') // "Abc"
(this + '') // "123"

“但是如果我不知道类型我该怎么做”

如果你想知道它的类型,请使用泛型toString可用于Object.prototype以获得内部[[班级]]财产。

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

为什么这不能是一个原始的? 的相关文章

  • 为什么 (jQuery) Waypoints“视图底部”不适用于隐藏元素?

    我试图使用 jQuery 和 Waypoints 以前称为 jQuery Waypoints 在用户向下滚动时动态显示隐藏的图像 我发现我可以很容易地向元素添加一个路径点 并在元素 在视图中 时触发处理程序 偏移属性设置在视图底部 但是 尝
  • 无法使用 Jade 模板包含相对路径文件

    当我尝试将文件包含在同一文件夹中时 收到以下错误 the filename option is required to use include with relative paths 有两个文件 索引 jade 项目列表 jade cont
  • 按 Enter 键提交消息?

    我正在开发一个基于本教程使用 Meteor 构建的聊天应用程序 http code tutsplus com tutorials real time messaging for meteor with meteor streams net
  • 为什么人们将自己的自定义/用户函数添加到 jQuery 对象中? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我见过人们将自己的自定义 用户功能添加到jQuery目的 例如 myUserFunc function regular JS code 你为什么
  • Durandal SPA 与打字稿有关的问题

    我使用 TypeScript 1 8 将我的 durandal SPA 应用程序从 VS 2012 更新到 VS 2015 它将生成 JavaScript ECMA5 我解决了所有构建错误 但我无法修复一个名为 return 语句只能在函数
  • 如何使用 JavaScript 上传文件而不进行回发?

    我正在 ASP NET 中进行文件上传 我用了
  • 如何格式化折线图谷歌图表材料上的轴?

    我在格式化材料图表的轴时遇到问题 Using classic line chart if I would like to format my vertical axis with a dollar sign I would do vAxes
  • 从流程图中获取数据系列的颜色

    在看到 stackoverflow 用户页面上很酷的新 声誉 选项卡后 我受到启发 开始尝试使用 Flot 图表库 我有一个包含数百个系列的折线图 在任何给定时间 这些系列中只有几个是可见的 我的数据系列分为几个 类别 我根据该类别分配数字
  • 当系列没有相同的时间值时,如何在工具提示中显示所有系列

    我有一个显示多个时间序列的图表 不同时间序列不会同时采样 有没有办法在工具提示中显示所有系列 在示例中 您可以看到所有系列都包含在前 2 个点的工具提示中 因为它们是同时采样的 其余点仅包含 1 个系列 var myChart echart
  • 全日历与 UTC 和本地日期的混淆

    我确实让 fullcalendar 正常初始化 所以它代表当前日期 午夜 gt 午夜 1 天 1 小时时段 我从其他一些数据源获取带有时间戳的数据 格式为 YYYY MM DD HH mm 作为字符串传输 无时区信息 因此 我将该字符串转换
  • React Native 中 fontAwesome 图标的圆形轮廓

    我想使用 fontAwesome 图标 使其位于圆圈的中间 我想将它用作一个图标项 我读到我们可以将它与圆形图标一起使用并将其放置在其中 但我无法使其工作 import IconFA from react native vector ico
  • 2 个 SVG 路径的交集

    我需要检查两个 SVG Path 元素是否相交 检查边界框与 getBBox 太不准确了 我目前正在做的是迭代两条路径 getTotalLength 然后检查是否有两个点 getPointAtLength 是平等的 下面是一个片段 但正如您
  • Lodash _.hasIntersection?

    我想知道两个或多个数组是否有共同的项目 但我不在乎这些项目是什么 我知道 lodash 有一个 intersection方法 但我不需要它来遍历每个数组的每个项目 相反 我需要类似的东西 hasIntersection一旦找到第一个常见的出
  • 如何将类组件中的 props 发送到功能组件?

    我是 ReactJS 的初学者 需要知道如何将一个页面中的 props 值发送到另一个页面 道具位于第一页上我可以获取类组件值如何获取另一页中的值 提前致谢 墙色 jsx import React Component from react
  • 从数组创建树并将父字段的表示形式更改为对象而不是 ID

    我堆满了琐碎的问题 但找不到解决方案 任何帮助将不胜感激 我有一个对象数组 id 1 title home parent null id 2 title about parent null id 3 title team parent 2
  • 数据表 - 从 AJAX 源过滤数据

    我有一个数据表 正在从 api 获取数据 现在我的状态是活动的 非活动的 如果标志是活动的 那么我需要在数据表中显示 否则我不应该显示过期的 这是我的fiddle https jsfiddle net lakshmipriya001 qLp
  • 使用外部按钮选择下一个/上一个单选按钮

    我正在制作一种幻灯片形式 当用户单击下一张图像时 还必须选择单选按钮 我的滑动功能可以正常工作 下一个按钮 也可以工作 但我有点坚持使用 上一个 按钮 不明白为什么它不起作用 fiddle http jsfiddle net V4tdx 这
  • 如何在 getStaticPaths 内添加 params 值数组

    我有一个页面 其结构如下 read slug number 我想要得到slug每个对应的值number in the getStaticPaths这是代码 export async function getStaticPaths const
  • javascript 加壳器与压缩器

    我想知道加壳器与压缩器的区别 优点是什么 即您应该在网络应用程序中部署压缩版本还是压缩版本 示例代码 var layout NAVVISIBLE 1 Init function this Resize Dimensions function
  • 如何在 JavaScript 中将日期时间微格式转换为本地时间?

    我有一个页面当前正在使用日期时间微格式 http microformats org wiki datetime design pattern显示时间戳 但我只显示我自己的时区的人类可读时间

随机推荐

  • Elasticsearch 中的 _search 查询如何工作?

    问题更在于 Elasticsearch 节点如何交互以给出特定的搜索结果以及搜索请求的流程是什么 我参考了以下链接来理解 但它们对于我想要理解的内容不是很清楚 https www elastic co guide en elasticsea
  • 使用指针的数组长度[重复]

    这个问题在这里已经有答案了 数组长度可以使用以下方式计算 arr 1 arr然后简化为 arr 1 arr这进一步简化为1 arr arr 但是 当在与完成内存分配的函数不同的函数中计算长度时 会计算出错误的结果 例如 include
  • 为什么 Typescript 中需要 infer 关键字?

    为什么 Typescript 开发人员创建了infer关键词 根据文件 https www typescriptlang org docs handbook release notes typescript 2 8 html 这是如何使用它
  • ASP.NET MVC - 从 MemoryStream 下载 Excel 文件(损坏的文件)

    我正在尝试使用浏览器中的内置下载来下载 Excel 文件 基本上 在我的控制器中创建 Excel 文件后 下载工作正常 但是当我尝试在 Excel 中打开此文件时 我被告知该文件已损坏 Excel 无法打开文件 Report xlsx 因为
  • 释放从新放置分配的内存

    考虑下面的代码 include iostream include conio h using namespace std class sample private int i public sample int ii 0 i ii cout
  • 打开android studio配置文件时发生OOM错误

    安卓版本 8 0 0 当我调用file list时 如果我打开android studio profiler来监控内存 很容易出现OOM错误 如下 java lang OutOfMemoryError EnsureLocalCapacity
  • .NET Core 初始请求缓慢

    面对创建新的小型服务的任务 我想知道是否有一些最佳实践指南来确保该服务的快速响应时间 包括前 1 3 个请求 首先 我喜欢使用 NET Core 和 webapi 模板 NET Core 6 创建服务 但是创建其中一些后 我注意到服务的初始
  • Java 数组和列表的共同祖先

    在 NET 中 数组和列表都以 Enumerable 作为祖先 因此接受 Enumerable 作为参数的方法可以同时接收数组和列表作为其参数 我想知道Java中是否有类似的东西 不 Java 中没有类似的东西 我通常建议你设计 API 方
  • setTimeOut 和本地函数

    我正在开发 Axe 4 0 我正在尝试在具有本地函数的作业中使用 Object setTimeOut 方法 如中所述msdn 文档 http msdn microsoft com en US library aa857865 28v ax
  • 在类模板中为成员函数定义单个模板,并在成员函数中使用两个模板

    我目前正在学习模板如何在 C 中工作 特别是 我正在查看类模板中的单个成员函数模板 为了理解我的意思 代码如下 foo h template
  • 向光标位置插入元素(表格)

    我想创建一个具有自定义样式的新 Table 元素 并将其附加到文档中的当前光标位置 我发现可以通过以下方式获取当前位置 var cursor DocumentApp getActiveDocument getCursor 返回一个 Posi
  • ASP.Net 中 URL 中的 UrlEncoding Plus(+)

    我正在对一个字符串进行加密和 Base64 处理 一切都运行良好 直到我从 QueryString 集合中检索加密的字符串 加密文本包含一个加号 当我检索加密的字符串时 曾经有加号的地方现在变成了空格 正如您可以想象的那样 这不会解密 我尝
  • 搜索颠覆历史(全文)

    有没有办法对颠覆存储库执行全文搜索 包括所有历史记录 例如 我编写了一个在某处使用过的功能 但后来不需要它 所以我对文件进行了 svn rm d 但现在我需要再次找到它以将其用于其他用途 svn 日志可能会说 删除了未使用的内容 之类的内容
  • 具有可点击区域的可缩放 SVG - Android

    我正在做一个非常简单的应用程序 它需要显示一个包含广义世界地图的 SVG 通过单击城市名称 svg 矩形 我需要显示与该城市对应的另一个 SVG 此外 所有 SVG 都必须支持缩放和平移 我设法让 SVG 支持缩放和平移 效果非常完美 为此
  • Excel 加载项失败并显示 0x8004063E

    我有一个 Excel 添加 它曾经完美地工作 最近 许多客户收到以下错误 在这个问题的最后 环境详情 Windows 7 8 64 位 微软 Office 2013 64 位 Add in是在 net 3 5下编译的 任何帮助将不胜感激 H
  • Scala 模板将样式应用于 inputText 的标签 [Play 2 HTML5 辅助标签]

    我正在使用带有输入助手的 scala 模板 我使用的类属性应用样式
  • C# - Silverlight 中 .NET ArrayList.ToArray(Type) 的替换

    下面是我编写的一个简单方法 非常简化 所以我希望它仍然能够理解要点 用于获取字符串中数组元素的字符串表示形式 并将它们转换为这些值的实际数组 t 是数组的类型 DeserializeArray string sArrayElements o
  • 在 Tomcat 上安装 Sonar 和 Jenkins

    我有一个 tomcat 服务器 我想在上面安装 Jenkins 和 Sonar 我使用的是 debian 发行版 因此我通过 apt get 获得了 tomcat6 和 Jenkins 当我将 jenkins war 复制到 tomcat6
  • python:从程序运行交互式 python shell

    我经常遇到这样的情况 我将编写一个脚本 并且我正在编写脚本的一部分 我想以交互方式使用一些变量 到达该部分需要运行我已经编写的脚本的大部分 在这种情况下 从 shell 内部运行该程序并非易事 我必须以某种方式重新创建该函数的条件 我想做的
  • 为什么这不能是一个原始的?

    我正在摆弄 JavaScript 并注意到this永远不可能是原始的 我在说什么 让我解释 以这个函数为例 function test return typeof this test call Abc object test call 12