【问题标题】:What is "native JavaScript"?什么是“原生 JavaScript”?
【发布时间】:2011-08-11 06:59:29
【问题描述】:

有什么叫做“原生 JavaScript”的东西吗?我在将要面试的职位描述中看到了这个词。

普通的 JavaScript 和 Native JavaScript 一样吗?

【问题讨论】:

  • 可能是指 JavaScript,而不是 jQuery、Dojo 等 JS 库。

标签: javascript


【解决方案1】:

“原生”一词在 JavaScript 中被过度使用。

  • 通俗地说,它就像 Johan 的回答一样:没有 JQuery、Moo、Dojo。

  • 类似于 JNI for Java、Google 的 GWT 和类似的 I-compile-down-to-JavaScript 将底层实现称为原生。

  • 我认为,在 JS 中 original 使用 native 是指在 ECMAScript 中构建和定义的对象,而不是环境。 JavaScript 作为一种 ECMAScript 语言,并非旨在自给自足。它嵌入在主机环境中,例如 Web 浏览器、Photoshop、Acroread 等。当您编写 Web 客户端程序时,您将使用诸如 MathFunctionArrayWindowButton。前三个是native(独立于宿主环境),而后两个是非原生的(由宿主环境提供)。这与cdhowie的答案相反,顺便说一句,这是一个很好的答案。不过很有趣!

我相信还有其他解释。我的猜测是,如果你在职位描述中看到这一点,它可能不是最后一个:这个定义太学术了。 :)

这是来自 ECMAScript-262 标准第五版的官方定义:

4.3.6 native object --- object in an ECMAScript implementation 
whose semantics are fully defined by this specification rather 
than by the host environment. NOTE Standard native objects are 
defined in this specification. Some native objects are built-in; 
others may be constructed during the course of execution of an 
ECMAScript program.

换句话说,像MathObjectStringRegExp 这样的内置函数是原生的,就像我使用对象文字或函数定义创建的任何对象一样。但是 宿主对象 是相反的。抱歉打扰了。

【讨论】:

  • 内置插件是原生的子集。部分混淆是 JavaScript 或 javascript 作为 ECMAScript 的同义词的普遍使用。它不是。像 jQuery 这样的库可以说是原生 JavaScript,但它们不是原生 ECMAScript,因为它们依赖于宿主 DOM 对象。然而,像 moment.js 这样的库是原生的 ECMAScript,因为它们只依赖于内置对象,而不是宿主对象(当然,请注意 ECMAScript 依赖于宿主来提供运行环境)。 :-)
【解决方案2】:

Native JS,我想是下面的例子:

$=~[];$={___:++$,$$$$:(![]+"")[$],__$:++$,$_$_:(![]+"")[$],_$_:++$,$_$$:
({}+"")[$],$$_$:($[$]+"")[$],_$$:++$,$$$_:(!""+"")[$],$__:++$,$_$:
++$,$$__:({}+"")[$],$$_:++$,$$$:++$,$___:++$,$__$:++$};$.$_=
($.$_=$+"")[$.$_$]+($._$=$.$_[$.__$])+($.$$=($.$+"")[$.__$])+
((!$)+"")[$._$$]+($.__=$.$_[$.$$_])+($.$=(!""+"")[$.__$])+
($._=(!""+"")[$._$_])+$.$_[$.$_$]+$.__+$._$+$.$;$.$$=$.$+
(!""+"")[$._$$]+$.__+$._+$.$+$.$$;$.$=($.___)[$.$_][$.$_];
$.$($.$($.$$+"\""+$.$$_$+$._$+$.$$__+$._+"\\"+$.__$+$.$_$+$.$_$+
$.$$$_+"\\"+$.__$+$.$_$+$.$$_+$.__+".\\"+$.__$+$.$$_+$.$$$+
"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+$.$_$+$.__$+$.__+$.$$$_+
"(\\\"\\"+$.__$+$.__$+$.___+$.$$$_+(![]+"")[$._$_]+(![]+"")[$._$_]+
$._$+", \\"+$.__$+$.$$_+$.$$$+$._$+"\\"+$.__$+$.$$_+$._$_+
(![]+"")[$._$_]+$.$$_$+"!\\\")\\"+$.$$$+$._$$+"\"")())();

【讨论】:

  • Wat...Mind = 吹。
  • 不,它被称为缩小或随机模式
  • 通过快速阅读,这段代码看起来只是将“Hello World”附加到 DOM。但是当我尝试它时,我得到了错误:VM46:8 Uncaught EvalError: Refused to evaluate a string as JavaScript because 'unsafe-eval' is not a allowed source of script in the following Content Security Policy directive:"script-src chrome: //资源 chrome://test 'self' 'unsafe-inline' https:".
  • 再努力一点,你可以跑的
【解决方案3】:

Native JavaScript 是在浏览器中实现的 JavaScript。

浏览器实现遵循 ECMA 标准和一些额外的方法。例如,如果您熟悉 jQuery,并希望通过 ID 选择元素

$('#myId')

原生 JavaScript 将是

document.getElementById('myId')

现在,如果您需要执行一些简单的任务。您可能不会或不应该加载庞大的 jQuery 库并执行其所有功能。只需 10 行原生 Javascript 而不是 5 行 jQuery 代码即可完成这项工作

【讨论】:

    【解决方案4】:

    我相信原生 Javascript 崇尚“香草”javascript,所以没有 jQuery、MooTools 等。只是普通的旧 javascript

    【讨论】:

      【解决方案5】:

      因为@Ray 的回答是正确的,所以不要让事情变得太复杂,但是已经出现了一个用于构建移动应用程序的新 JavaScript 框架,称为 NativeScript https://www.nativescript.org/ 如果还不够混乱,这个框架允许您编写纯“香草”JavaScript,但调用本机 (iOS/Android/WindowsPhone) API。

      这几乎就像编写一个“原生”应用程序(想想 Objective-C/Java/C#),但使用的是在设备上运行时解释的单一语言 (JavaScript)。

      我怀疑随着这个库越来越受欢迎,“Native JavaScript”可能会被用作描述使用这个框架的代码的标签(尤其是因为这就是我通过谷歌得到这个问题的方式)

      【讨论】:

        【解决方案6】:

        原生 JavaScript 都是 JavaScript 代码。不是任何类型的框架代码。 它更快并在浏览器中加载。 您可以用于简单的浏览器任务,不需要任何数据库接口或任何后端大型计算工作。 使用框架会使代码变大,使浏览器变慢。

        【讨论】:

        • 您的回答似乎只说明了部分情况。本机(原版)JavaScript 可以做 任何事情 JavaScript 库可以做的事情,或者反过来说:一个库不能做的比本机代码的能力更多。库添加的主要内容是抽象,因此您可以使用更易读、更简洁的代码来更轻松做一些事情。事实上,这可以以额外的计算和网络上的额外字节为代价。
        【解决方案7】:

        我所知道的术语“原生 JavaScript”的唯一上下文涉及编写 JavaScript 对象和/或函数,这些对象和/或函数由 JavaScript 提供程序实现,而不是用 JavaScript 本身编写。例如,您在window 对象上调用的许多函数都是由浏览器以其本机语言(Firefox/Mozilla 的 C++ 等)实现的。这可能就是他们的意思......

        它们也可能意味着 vanilla/pure JavaScript(没有像 jQuery 或 Prototype 这样的框架)。考虑与他们联系并要求澄清。

        【讨论】:

        • 这完全是错误的方式。原生对象是纯 JavaScript 对象,而环境提供的对象(例如浏览器中的 DOM 节点)称为 宿主对象
        【解决方案8】:

        也是一样,也许只是想知道你所做的不仅仅是 jayesh 等等。

        【讨论】:

          【解决方案9】:

          不,对我来说,Native Javascript 意味着 3rd 方 js 函数可以做常规 js 不能做的事情,有点像 Java-JNI 关系。谷歌 JNEXT 和 JSNI 了解更多信息。

          再次,我不知道问题的真实背景,如果我是你,我会要求澄清。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2018-06-23
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多