什么是JavaScript中的“断言”?

2020/10/09 11:01 · javascript ·  · 0评论

assertJavaScript是什么意思?

我看过类似的东西:

assert(function1() && function2() && function3(), "some text");

并想知道该方法的assert()作用。

assertJavaScript中没有(目前;谈论添加一个,但是它处于早期阶段)。也许您正在使用提供此功能的某些库。通常的含义是,如果传递给函数的表达式为false,则抛出错误;这是断言检查的一般概念的一部分通常,断言(被称为断言)仅在“测试”或“调试”构建中使用,并从生产代码中删除。

假设您有一个应该始终接受字符串的函数您想知道是否有人用不是字符串的东西调用了该函数。因此,您可以这样做:

assert(typeof argumentName === "string");

...assert如果条件为假,在哪里将引发错误。

一个非常简单的版本如下所示:

function assert(condition, message) {
    if (!condition) {
        throw message || "Assertion failed";
    }
}

更好的是,Error如果JavaScript引擎支持对象,则可以使用该对象(实际上可能不支持对象),这具有收集堆栈跟踪等优点:

function assert(condition, message) {
    if (!condition) {
        message = message || "Assertion failed";
        if (typeof Error !== "undefined") {
            throw new Error(message);
        }
        throw message; // Fallback
    }
}

甚至IE8都具有Error(尽管它不具有此stack属性,但是现代引擎[包括现代IE]具备)。

如果使用现代浏览器或nodejs,则可以使用console.assert(expression, object)

了解更多信息:

其他答案很好:ECMAScript5中没有内置的断言函数(例如,基本上可以在任何地方使用的JavaScript),但是某些浏览器将其提供给您,或者具有提供该功能的附加组件。虽然最好使用一个成熟/流行/维护的库来实现此目的,但出于学术目的,“穷人的断言”功能可能看起来像这样:

const assert = function(condition, message) {
    if (!condition)
        throw Error('Assert failed: ' + (message || ''));
};

assert(1 === 1); // Executes without problem
assert(false, 'Expected true');
// Yields 'Error: Assert failed: Expected true' in console

assert()不是本机javascript函数。这是某人自定义的功能。您将不得不在页面或文件中查找它,并将其发布给任何人以帮助确定它在做什么。

检查以下内容:http : //net.tutsplus.com/tutorials/javascript-ajax/quick-tip-quick-and-easy-javascript-testing-with-assert/

它用于测试JavaScript。令人惊讶的是,在测试时,此代码仅用五到六行就能提供强大的功能和对代码的控制。

assert函数接受两个参数:

结果:一个布尔值,它表示您的测试是通过还是失败

描述:您的测试的简短描述。

然后assert函数简单地创建一个列表项,根据测试返回的是true还是false来应用“通过”或“失败”的类,然后将描述追加到列表项。最后,该编码块被添加到页面中。疯狂的简单,但完美地运行。

这是一个断言函数的非常简单的实现。它带有一个值和要测试的内容的描述。

 function assert(value, description) {
        var result = value ? "pass" : "fail";
        console.log(result + ' - ' +  description); 
    };

如果该值评估为true,则通过。

assert (1===1, 'testing if 1=1');  

如果返回false,则失败。

assert (1===2, 'testing if 1=1');

如果断言为假,则显示该消息。具体来说,如果第一个参数为false,则第二个参数(字符串消息)将记录在开发人员工具控制台中。如果第一个参数为true,则基本上什么也不会发生。一个简单的例子–我正在使用Google Developer Tools:

var isTrue = true;
var isFalse = false;
console.assert(isTrue, 'Equals true so will NOT log to the console.');
console.assert(isFalse, 'Equals false so WILL log to the console.');

它可能带有一些代码正在使用的测试库。这是一个示例(可能是它与您的代码使用的库不同,但是显示了总体思路):

http://chaijs.com/guide/styles/#assert

单词或函数“断言”通常用于测试应用程序的各个部分。

声明功能是指示程序检查条件的简短方式(也称为“声明”),如果条件不是True,则将引发错误。

因此,让我们看看“普通代码”中的样子

if (typeof "string" === "array") {
throw Error('Error: "string" !== "array"');
}

assert你可以简单地写:

assert(typeof "string" === "array")

在Javascript中,没有本机assert函数,因此您必须使用某个库中的一个。

为了简单介绍,您可以查看以下文章:

http://fredkschott.com/post/2014/05/nodejs-testing-essentials/

希望对您有所帮助。

如果第一个属性为false,而第二个属性为要抛出的消息,则断言将引发错误消息。

console.assert(condition,message);

有很多评论说断言在JavaScript中不存在,而是JavaScriptconsole.assert()中的assert函数。断言的目的是找出错误发生的原因/位置。

console.assert(document.getElementById("title"), "You have no element with ID 'title'");
console.assert(document.getElementById("image"), "You have no element with ID 'image'");

在这里,根据消息,您可以找到错误所在。这些错误消息将以红色显示在控制台上,就像我们调用“console.error();

要在控制台中查看更多功能”一样
console.log(console);

在性能和兼容性方面可以改善先前的答案。

检查一次,如果Error对象存在,如果不声明它:

if (typeof Error === "undefined") {
    Error = function(message) {
        this.message = message;
    };
    Error.prototype.message = "";
}

然后,每个断言将检查条件,并始终抛出一个Error对象

function assert(condition, message) {
    if (!condition) throw new Error(message || "Assertion failed");
}

请记住,控制台不会显示真正的错误行号,而是显示assert函数的行,这对于调试没有用。

如果使用webpack,则只能使用node.js断言库尽管他们声称它“不打算成为通用断言库”,但对于临时断言来说似乎还可以,而且Node空间中似乎也没有竞争对手(Chai专为单元测试而设计)。

const assert = require('assert');
...
assert(jqXHR.status == 201, "create response should be 201");

您需要使用webpack或browserify才能使用它,因此很明显,仅当工作流中已有这些组件时,此选项才有用。

除了console.assert等其他选项自己滚动之外,还可以使用invariant它具有几个独特的功能:

  • 它支持格式化的错误消息(使用%s说明符)。
  • 在生产环境(由Node.js或Webpack环境确定)中,错误消息是可选的,允许(略微)较小的.js。

正如TJ提到的,assertJavaScript中没有但是,有一个名为assert的节点模块主要用于测试因此,您可能会看到类似以下的代码:

const assert = require('assert');
assert(5 > 7);
本文地址:http://javascript.askforanswer.com/shenmeshijavascriptzhongdeduanyan.html
文章标签: ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!