断言在JavaScript中是什么意思?

我见过这样的情况:

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

并且想知道assert()方法做什么。


当前回答

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

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

其他回答

JavaScript本身没有标准的断言。也许你使用的库提供了这样的功能;例如,如果你在使用Node.js,也许你在使用断言模块。(提供实现控制台API的控制台的浏览器和其他环境提供console.assert。)

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

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

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

...如果条件为假,assert将抛出错误。

一个非常简单的版本是这样的:

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

更好的是,利用Error对象,它具有收集堆栈跟踪的优点,例如:

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

正如t.j.所提到的,JavaScript中没有断言。 但是,有一个名为assert的节点模块,主要用于测试。所以,你可能会看到这样的代码:

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

Node.js有一个assert函数,你可以导入:

Const assert = require('assert')

正如人们所期望的那样,assert(false)抛出一个错误,assert(false, message)抛出一个带有消息的错误。

其他答案已经指出JS本身没有本机断言函数,在撰写本文(2021年4月)时仍然如此。

以前的答案可以在性能和兼容性方面得到改进。

检查一次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函数的行号,这对调试没有用处。

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