断言是一种调试手段,他不是一种正常的开发逻辑代码,只是辅助我们开发人员进行代码调试用的,生产环境是不可以出现断言的代码的,所以首先明确一点,他和if判断的区别在于,if判断是兼容和排除用户的操作来的,断言是兼容和排除开发者的操作来的,比如开发者觉得这一块不可以是什么,那么他为了程序可以避免这种我已经知道的问题的出现,就可以使用断言进行拦截和抛出异常。如果你还是不理解,你可以简单的理解为,开发者对自己已知错误但是避免这种错误的一种调试手段!当然他可以用来写一些单元测试什么的。
<template>
javascript 断言
</template>
<script setup>
//TODO: 定义一个断言函数
const asserts = (con, msg) => {
// 条件为 你不希望出现的值 出现之后就抛出异常 提示出相应的信息
if (con !== 0) {
throw new Error(msg)
}
}
// TODO: 求两个数字相除
const count = (n, m) => {
asserts(m === 0, '除数不可以为0')
return n / m
}
count(1, 0);
</script>
报错截图:
import { assert } from 'chai'
const count = (n, m) => {
console.log(assert);
assert(m !== 0, '除数不可以为0')
return n / m
}
count(1, 0)
const count = (n, m) => {
// 我期望这里是什么数据,如果不是,就直接抛出异常,后面的代码将不会继续执行 比如这里我期望m不是0 如果是 就直接抛出异常
assert.notStrictEqual(m, 0, '除数不可以为0')
return n / m
}
count(1, 0)
报错截图:
const count = (n, m) => {
// 断言之后的代码将不会执行,但是后面还可以继续跟断言的代码逻辑,前面一个执行之后,后面的还是会继续执行,比如我传递的数据是1 不是0 那么后续的断言就会继续执行
assert.notStrictEqual(m, 0, '除数不可以为0')
assert.deepEqual({ tea: 'green' }, { tea: 'jasmine' },'两边不一样');
return n / m
}
count(1, 1)
chai是一个断言库,前面说了,断言的作用,那么如果每一个都断言功能都自己写的话,开发的成本就会变得比较高,就好比每一个UI效果都是自己写,那么开发一个页面的成本就会变得很高,chai就是提供了很多我们常用的一些断言逻辑,将他们封装了起来,这样可以让我们在写的时候直接用,里面的逻辑就是他的函数名字,比如上面的notStrictEqual 不是严格相等,就是严格相等的取反,=== 和 !== 的写法,再比如deepEqual 深度相等,就是两个对象不仅是key 相等,他的value也是一样的才算相等,类似这种功能我们自己写的话,是比较麻烦的,所以这里是使用了一个断言库,我们需要的一些功能函数,chai里面会提供很多相似的功能供我们参考使用!