首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

带你入门前端工程(四):测试

根据错误性写测试,即错误的输入应该是错误的结果。 对一个函数做测试 例如一个取绝对值的函数 abs(),输入 1,2,结果应该与输入相同;输入 -1,-2,结果应该与输入相反。...) // 类型错误 }) 现在我们需要测试一下 abs() 函数:在 src 目录新建一个 main.js 文件,在 test 目录新建一个 test.spec.js 文件。...可以看到测试覆盖率下降了,为什么会这样呢?因为 abs() 函数中判断类型错误的那个分支的代码没有执行。 // 就是这一个分支语句 if (typeof a !...Funcs:函数覆盖率,是否执行了每个函数。 Lines:行覆盖率,是否执行了每一行代码。 可能有人会有疑问,1 和 4 不是一样吗?其实不一样,因为一行代码可以包含好几个语句。...现在把测试类型错误的那一行代码注释掉,再试试: // expect(() => abs('abc')).toThrow(TypeError) 第一段代码对应的覆盖率: ?

1.6K10

Javascript的JSON.stringify()知多少?

函数类型:则在序列化过程中,被序列化的值的每个属性都会经过该函数的转换和处理; 数组类型:则只有包含在这个数组中的属性名才会被序列化到最终的 JSON 字符串中; null或未提供:则对象所有的属性都会被序列化...注意: 循环引用的对象(对象之间相互引用,形成无限循环)执行此方法,会抛出错误。 布尔值、数字、字符串的包装对象在序列化过程中会自动转换成对应的原始值。...这就是为什么对象中有这些类型的属性,不能使用JSON.parse(JSON.stringify())来进行深拷贝。...stringify(data.toJSON); }else if(Array.isArray(data)){ const arr = []; //对于数组类型有很多种情况 data.forEach...但是当我们进行手撕代码的时候,需要考虑各种边界情况,这对于我们来说比较麻烦,作为面试也是对数据类型的全面考察。

1.3K00

Python编程常见问题与解答

为什么在IDLE中执行会提示语法错误呢? 答:应该在命令提示符环境执行,不是在Python开发环境中执行。...4.问:为什么使用pip命令安装扩展库是提示“不是内部或外部命令,也不是可运行的程序或批处理文件”?...为什么使用下标访问其中的元素时提示“TypeError: 'map' object is not subscriptable”呢?...遇到这种情况时,仔细检查代码的逻辑和问题的要求是否一致,是否把>写成>=了,或者忽略了range()函数返回的是左闭右开区间了,是不是把运算符**写成*了,是不是代码缩进有错误。...如果不知道文件采用什么编码格式,可以使用记事本打开之后使用“另存为”功能保存成特定的编码格式。

3.4K10

带你入门前端工程(十):重构

函数 function cache(data) { const result = [] data.forEach(item => { if (item.isCache)...,可以看到这个函数做了三次 if 判断,如果没找到数据返回 null。...如果有一些代码都是作用在一个地方,那么最好是把它们放在一起,而不是夹杂在其他的代码中间。最简单的情况下,只需使用移动语句就可以让它们聚集起来。...这样在写代码时,重构才能像呼吸一样自然,即使用了你也不知道。 参考资料 《重构2》 带你入门前端工程 全文目录: 技术选型:如何进行技术选型? 统一规范:如何制订规范并利用工具保证规范被严格执行?...重构:为什么做重构?重构有哪些手法? 微服务:微服务是什么?如何搭建微服务项目? Severless:Severless 是什么?如何使用 Severless?

56330

d3成神之路(一):先从柱状图开始

感觉也不是很难吧,相对于echarts具有丰富的案例,d3只是提供很底层的api,想创造什么,看你的创造力了。 如果不知道的怎么学习一样东西时,可以先试着模仿。...就像我的女儿学习拍手,走路,吃饭。 学习d3先来个柱状图吧 照着b站的视频,我也敲出来了这样一个柱状图。...简单地说,比例尺相当于是一个函数,让我们把一组定义域映射到值域。 后面的domain()和range(),两个函数都是又来修饰 该比例尺的。...所以 domain()函数是用来设置定义域,range()是用来设置值域的。 domain的参数取自 数据集中, range的参数取自容器 svg的长宽。...d3.axisBottom(xScale) g.append('g').call(xAxis).attr('transform', `translate(0, ${innerHeight})`) data.forEach

73410

Python编程常见出错信息及原因分析(3)

: unhashable type: 'dict' 错误原因分析与解决方案: 在Python中,可变的数据不可哈希。...如果不小心把列表、字典、集合或类似可变(不可哈希)的数据作为字典的“键”或者集合的元素,会抛出“不可哈希”错误,这种用法要坚决避免。...(2)数据数量不一致错误 在调用函数时,要求实参数量和形参必须数量一致,即使函数有默认值参数,这个要求也是必须满足的,只是有些形参有默认值,所以表面看起来实参数量和形参数量不是完全一样。...5, 7 ValueError: too many values to unpack (expected 2) 这是因为等号左侧有两个变量,右侧必须有两个值才行,但是现在给了3个,Python解释器懵了...,不知道该怎么办,只好抛出异常。

87060

《你不知道的JavaScript》:作用域提升

《你不知道的JavaScript》第一部分作用域和闭包第3篇。 前两篇主要讲作用域的查询机制和常见形式,本篇要讲的是作用域中的声明提升。 在全局作用域和局部作用域中,都存在声明提升的行为。...foo(); // 输出=> 1 function foo(){ console.log(1); } fn(); //输出TypeError bar(); //...输出ReferenceError var fn = function bar(){ console.log(2); } 问个问题:为什么fn()调用会报TypeError错误呢?...因为此时的fn值为undefined,而对undefined调用方法,就会报TypeError错误。...即先提升函数,再提升变量。这再次证明果然js中函数是一等公民的地位。 最后总结下,js中的提升行为,面向的是对象是变量声明和函数声明,排除了包括函数表达式的赋值在内的赋值操作并不会提升。

61820

盘点那些 JS 手写题

== 'function') { throw new TypeError('第一个参数不是构造函数'); } // 新建一个空对象,对象的原型为构造函数的 prototype 对象...请注意,this可能不是该方法看到的实际值:如果这个函数处于「非严格模式」下,则指定为 null 或 undefined 时会自动替换为指向全局对象,原始值会被包装。 arg1, arg2, ......请注意,this可能不是该方法看到的实际值:如果这个函数处于「非严格模式」下,则指定为 null 或 undefined 时会自动替换为指向全局对象,原始值会被包装。 argsArray:可选的。...== 'function') { throw new TypeError('fn 不是一个函数'); } // 确定回调函数的 this 指向 let context = thisArg...== 'function') { throw new TypeError('fn 不是一个函数'); } // 确定回调函数的 this 指向 let context = thisArg

1.3K30

关于javascript中的this 一段小实例深有体会啊

打开网页什么都没有,还是和之前一模一样,查bug查半天也没有所以然,算了,照着书上把row[j]替换成this吧,再打开网页, 一放上去在变粗了,但还是不明白为什么。...说明我还是想知道为什么是this就可以(ps:之前了解了点点 this 指调用包含this这个函数的对象,白话就是:那个对象调用包含this的这个函数,那么this指谁  或者说this是值调用他的对象..., 也不知道为什么突然觉得自己之前的理解是错误的,按着新的理解去走一遍,end 大呼自己好蠢,真的是蠢,不过也没办法,走进了那个坑里就不会那么轻易的爬出来。  ...//依次下去 假设tr有9个 那么执行到j=9的时候就不会执行了 此时在函数体中 j=9!    看到现在应该知道j的值是9,由此可见不是与前面的rows[j]想对应。...都是很基础的东西,但对像我这样当时迷惑了的同学肯定有所帮助。 当彻底搞明白了这个为什么之后,收获的却是很多很多。共勉!(如有错处,还望指正批评)

38340

浅析JS中的堆内存与栈内存

不能吧 不知道各位看官怎么想?答案是部分能改,部分不能改。const定义的基本类型不能改变,但是定义的对象是可以通过修改对象属性等方法来改变的。...at :1:4 const不是定义常量么?为什么还能改?这就是我们今天要说的重点~ js中的堆内存与栈内存 在js引擎中对变量的存储主要有两种位置,堆内存和栈内存。...const在内存中的存储,那么const、let定义的变量不能二次定义的流程也就比较容易猜出来了,每次使用const或者let去初始化一个变量的时候,会首先遍历当前的内存栈,看看有没有重名变量,有的话返回错误...为什么呢?new大家都知道,根据构造函数生成新实例,这个时候生成的是对象,而不是基本类型。...大家想想吧,欢迎大家来一起讨论讨论~文中如有错误欢迎指出~

1.7K20

10 种 JavaScript 最常见的错误

有趣的是,在 JavaScript 中, null 和 undefined 是并不同,这就是为什么我们看到的是两个不同的错误信息。...(通过 window.onerror 处理程序引发的错误,而不是捕获在 try-catch 中)被浏览器的跨域策略限制时,会产生这类的脚本错误。...例如,如果您将您的 JavaScript 代码托管在 CDN 上,则任何未被捕获的错误将被报告为“脚本错误” 而不是包含有用的堆栈信息。...Rollbar.isAwesome(); 6、 TypeError: ‘undefined’ is not a function 当您调用未定义的函数时,这是 Chrome 中产生的错误。...当你认真读过《你不知道的 JavaScript》上卷后,这些错误基本就不会再出现了。 归根结底是对 JavaScript 基础知识掌握的不扎实。

8.5K20

浅谈python出错时traceback的解读

如果你是第一次看到它,也许你不知道它在告诉你什么。...当你想确定代码为什么引发异常的时侯,可以根据 Python 的 Traceback 获取许多有用的信息。下面,将列举一些常见的 Traceback,以便理解 Tracebac 中包含的不同信息。...只要提供了正确的输入,此代码没有任何可能导致异常被引发的错误。...使用不同的文件和不同的调用方式调用 greet 方法,得到的 Traceback 信息也是不同的,下面通过文件导入的形式来执行 greet 方法。...不过,这一次我们得到的不是,而是正在执行的函数的名称 greet()。 然后继续往上看,一行执行的代码,我们看到问题代码是 greet()函数调用时传入了一个整数。

1.7K40

6.1 错误类型

完美的程序是不存在的,程序有异常才是常态,所以遇到缺陷不要慌,找到错误根因解决它就行了。 本节专门介绍一下编程过程可能遇到的一些错误,如果你能识别这些异常原因并fix,那么你掌握了异常处理方法。...^ SyntaxError: invalid syntax 例子中函数 while True 被检查到有错误,是它前面缺少了一个冒号 : 。...'2' + 2 >> Traceback (most recent call last): File "", line 1, in TypeError...f.readlines() except: print("打开文件异常") finally: f.close() 6.3 抛出异常 上述的内容讲述了如何处理异常,那么为什么还要抛出异常呢...因为有时候你开发程序的过程并不知道程序在执行过程会遇到什么的异常,如果单纯的except处理掉,你并不能发现程序异常的根因,这时候可以使用raise语句抛出一个指定的异常。

1.2K10

滴滴前端高频面试题

、没有完成失败了变成了Rejected。...这时称为resolved(已定型)。如果改变已经发生了,你再对promise对象添加回调函数,也会立即得到这个结果。...如果不设置回调函数,Promise内部抛出的错误,不会反应到外部。当处于pending状态时,无法得知目前进展到哪一个阶段(刚刚开始还是即将完成)。...原型链的尽头一般来说都是 Object.prototype 所以这就是新建的对象为什么能够使用 toString() 等方法的原因。...但对于引用类型的数据(主要是对象和数组)来说,变量指向数据的内存地址,保存的只是一个指针,const只能保证这个指针是固定不变的,至于它指向的数据结构是不是可变的,完全不能控制了。

1.1K20
领券