什么是“;断言”;用JavaScript?

什么是“;断言”;用JavaScript?,javascript,assert,Javascript,Assert,在JavaScript中,assert是什么意思 我见过这样的情况: assert(function1() && function2() && function3(), "some text"); 并且想知道方法assert()的作用。JavaScript本身没有标准assert。也许你正在使用某个提供一个的库;例如,如果您使用的是Node.js,那么您可能正在使用。(浏览器和其他环境提供了一个控制台来实现该功能。) assert函数的通常含义是,如果传入函数的

在JavaScript中,
assert
是什么意思

我见过这样的情况:

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

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

JavaScript本身没有标准
assert
。也许你正在使用某个提供一个的库;例如,如果您使用的是Node.js,那么您可能正在使用。(浏览器和其他环境提供了一个控制台来实现该功能。)

assert
函数的通常含义是,如果传入函数的表达式为false,则抛出错误;这是一般概念的一部分。通常断言(正如它们被称为)只在“测试”或“调试”构建中使用,并从生产代码中剥离出来

假设您有一个函数,该函数应该总是接受字符串。您可能想知道是否有人使用非字符串的东西调用了该函数(没有像TypeScript或Flow这样的类型检查层)。所以你可以这样做:

assert(typeof argumentName === "string");
…其中,
assert
将在条件为false时引发错误

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

function assert(condition, message) {
    if (!condition) {
        throw message || "Assertion failed";
    }
}
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
更好的方法是使用
Error
对象,该对象具有收集堆栈跟踪等优点:

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

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

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

检查以下内容:

它用于测试JavaScript。令人惊讶的是,这段代码只有五到六行,在测试时,它提供了强大的能力和对代码的控制

assert函数接受两个参数:

结果:一个布尔值,它引用测试是通过还是失败

描述:测试的简短描述


然后,assert函数简单地创建一个列表项,根据测试返回的是true还是false,应用一个“pass”或“fail”类,然后将描述附加到列表项。最后,该编码块被添加到页面中。它非常简单,但工作非常完美。

如果使用现代浏览器或nodejs,您可以使用
控制台。断言(表达式、对象)

有关更多信息:


其他答案很好:ECMAScript 5中没有内置断言函数(例如,JavaScript基本上在任何地方都可以使用),但有些浏览器会将其提供给您,或者有提供该功能的附加组件。虽然最好使用一个完善的/流行的/维护的库来实现这一点,但出于学术目的,“穷人的断言”函数可能如下所示:

function assert(condition, message) {
    if (!condition) {
        throw message || "Assertion failed";
    }
}
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
以前的答案可以在性能和兼容性方面进行改进

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

if (typeof Error === "undefined") {
    Error = function(message) {
        this.message = message;
    };
    Error.prototype.message = "";
}
然后,每个断言都将检查条件,并且总是抛出一个
错误
对象

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

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

这里是assert函数的一个非常简单的实现。它需要一个值和对测试内容的描述

 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,则显示消息。具体来说,如果第一个参数为false,则第二个参数(字符串消息)将记录在开发人员工具控制台中。如果第一个参数为真,基本上什么也不会发生。一个简单的例子——我正在使用谷歌开发者工具:

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.');

如果你使用webpack,你可以直接使用。尽管他们声称它“不打算成为一个通用断言库”,但对于即席断言来说,它似乎更合适,而且在节点空间中似乎没有竞争对手(Chai是为单元测试而设计的)


您需要使用webpack或browserify才能使用此功能,因此显然,只有在工作流中已经存在这些功能时,此功能才有用。

除了其他选项,如或,您可以使用。它有两个独特的功能:

  • 它支持格式化错误消息(使用
    %s
    说明符)
  • 在生产环境中(由Node.js或Webpack环境确定),错误消息是可选的,允许(稍微)更小的.js
单词或函数“assert”主要用于测试应用程序的各个部分

断言函数是指示程序检查条件(也称为“断言”)的一种简短方法,如果条件不正确,它将抛出错误

让我们看看它在“普通代码”中的样子

if(字符串的类型=“数组”){
抛出错误('Error:'string'!=='array');
}

使用
assert
可以简单地编写:

assert(类型为“字符串”=“数组”)

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

对于简单的介绍,您可以查看本文:


我希望它能有所帮助。

正如T.J.提到的,JavaScript中没有
assert
。 但是,有一个名为的节点模块,它是。因此,您可能会看到如下代码:

const assert = require('assert');
assert(5 > 7);

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

console.assert(condition,message);
有很多评论说断言在JavaScript中不存在,但
console.assert()是JavaScript中的assert函数
断言的思想是找出bug发生的原因/位置

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