在大学的时候,导师会叫我们只用纸笔来做原型图,这样能更直观地看出我们的想法和信息架构。刚工作的时候,我也习惯只用纸笔来画原型图,这样能快速地表达我的想法。...纸原型的好处就在于与他人沟通的时候可以进行及时修改,也容易修改,并且能随时随地完善我的想法和思路。但当我在实际工作中使用纸原型一年后,使用纸原型的诸多弊端开始暴露出来: 1. 不易保存。...在使用了一年纸原型后我接触了许多原型软件, 原型软件的好处就在于它保真度较高,提高工作效率,适合用于用户测试,能够更好给老板和客户演示,更直观地看到最终产品的模型。...Mockplus是我使用中比较顺利的原型工具,一开始就看中了它的简单,易用,非常适合我这样的菜鸟。开箱即用的组件有几百个,自带了几千个矢量图标,已基本满足了我的需要。...我一般只需要把组件拖到页面上然后调整一下就可以了。使用一段时间后,我发现它在交互设计方面也很好用,无论是跳转页面还是在页面内做组件交互都挺快的。 ?
> 默认操作 具体指的是什么呢?...如果我们不希望执行这种默认操作,那么在事件对象上调用.stopPropagation()方法也无济于事,因为默认操作不是在正常的事件传播流中发生的。...既然是说默认行为,当然是元素必须有默认行为才能被取消,如果元素本身就没有默认行为,调用当然就无效了。什么元素有默认行为呢?如链接,提交按钮等。...//仅仅是在HTML事件属性 和 DOM0级事件处理方法中 才能通过返回 return false 的形式组织事件宿主的默认行为。...IE的方式来取消事件冒泡 } } 当需要阻止默认行为时,可以使用: function stopDefault( e ) { if ( e && e.preventDefault ){
将JavaScript关闭来测试页面仍然可以执行其正常功能,所有的链接(不包含href = “#” 的实例)是否能够正常工作,所有的表单可以正常工作并正确提交信息。...,而不能成为网页正常工作的必须组件。 ...该技术建议不要使用用户代理来嗅探代码路径,而应该在运行环境中检查是否有所需的属性或方法。通常将使用代理嗅探这种方法看作一种反模式。...可以增加一个内联的onclick属性,该属性在所有的浏览器中都可以正常工作,但是该属性会和关注分离和渐进增强有冲突。因此,应该争取在JavaScript中附加监听器,并放置于所有标记之外。 ...,可以通过为“click-wrap”div附加监听器来代替为每一个按钮都附加监听器。
但是在使用React进行开发时,我们却不能正确使用&&,很容易导致UI错误。 因此,我们需要知道,&&运算符导致的React UI界面错误。 如何工作? 我们应该用什么代替&&? 1....editors=1010 你会注意到,当 list 是一个空数组时,页面将呈现 0 而不是什么都没有。 我的天哪,这到底是怎么回事? 2.&& 是如何工作的? 这是一个 React 错误吗?...你一定明白为什么上面的 React 例子显示 0 了。 3.我们应该用什么来代替&&? && 运算符很容易出错,我们是否应该放弃使用它呢? 不,我们不应该那样做。...我们可以尝试这3种方式来避免这个问题。 3.1 使用!!list.length 我们可以把数组的长度转成布尔值,就不会再出现这个错误了。 // 1....如果你觉得有用的话,请点赞我,关注我,你将会阅读到更多的优质文章。 最后,感谢你的阅读。 往期回顾 #如何使用 TypeScript 开发 React 函数式组件?
但是在使用React进行开发时,我们却不能正确使用&&,很容易导致UI错误。 因此,我们需要知道,&&运算符导致的React UI界面错误。 如何工作? 我们应该用什么代替&&? 1....editors=1010 你会注意到,当 list 是一个空数组时,页面将呈现 0 而不是什么都没有。 我的天哪,这到底是怎么回事? 2.&& 是如何工作的? 这是一个 React 错误吗?...值得庆幸的是,这个问题的原因不是因为 React 犯了错误,而是与 Javascript 本身的工作方式有关。...你一定明白为什么上面的 React 例子显示 0 了。 3.我们应该用什么来代替&&? && 运算符很容易出错,我们是否应该放弃使用它呢? 不,我们不应该那样做。...我们可以尝试这3种方式来避免这个问题。 3.1 使用!!list.length 我们可以把数组的长度转成布尔值,就不会再出现这个错误了。 // 1.
将JavaScript关闭来测试页面仍然可以执行其正常功能,所有的链接(不包含href = "#" 的实例)是否能够正常工作,所有的表单可以正常工作并正确提交信息。...,而不能成为网页正常工作的必须组件。 ...该技术建议不要使用用户代理来嗅探代码路径,而应该在运行环境中检查是否有所需的属性或方法。通常将使用代理嗅探这种方法看作一种反模式。...可以增加一个内联的onclick属性,该属性在所有的浏览器中都可以正常工作,但是该属性会和关注分离和渐进增强有冲突。因此,应该争取在JavaScript中附加监听器,并放置于所有标记之外。 ...,可以通过为“click-wrap”div附加监听器来代替为每一个按钮都附加监听器。
赋值给了变量nextType var nextType = document.getElementById('one').nextSibling; 并使用 alert(nextType.nodeType...); 弹出他的节点类型,如果按常理,元素p下一个相邻的同胞元素为是span,弹出的数字应该为“1”,但我再火狐,谷歌,IE浏览器(网上说只有火狐才会把换行,空格当做文本节点处理,但是我测试谷歌,IE浏览器效果都是一样的...p 我是span p和span标签中间隔着文本节点,需要连续使用2次nextSibling...才能选中span标签取得文本值 firstChild,lastChild,nextSibling,previousSibling都会将空格或者换行当做节点处理,但是有代替属性 所以为了准确地找到相应的元素...于是我写了一个接口口,测试能在包括ie6在内运行的函数(自己写的,不知有没有其他什么细节错误没注意,反正能运行并且过滤文本节点获取正确的下一个元素节点) function getNextElement
Javascript 常用代码优化和重构的方法 简介 主要介绍以下几点: 提炼函数 合并重复的条件片段 把条件分支语句提炼成函数 合理使用循环 提前让函数退出代替嵌套条件分支 传递对象参数代替过长的参数列表...合理使用循环 如果多段代码实际上负责的是一些重复性的工作,那么可以用循环代替,使代码量更少。...传递对象参数代替过长的参数列表 函数参数过长那么就增加出错的风险,想保证传递的顺序正确就是一件麻烦的事,代码可读性也会变差,尽量保证函数的参数不会太长。如果必须传递多个参数的话,建议使用对象代替。...但不应该滥用三目运算符,我们应该在简单逻辑分支使用,在复杂逻辑分支避免使用。 // 简单逻辑可以使用三目运算符 var global = typeof window !...缺点: 链式调用带来的坏处就是在调试不方便,如果我们知道一条链中有错误出现,必须得先把这条链拆开才能加上一些调试 log 或者增加断点,这样才能定位错误出现的地方。
但是在有些情况下它不能很好的去处无用的代码,我们最好知道那些代码应该被打包,而不是仅仅依靠打包工具来尝试修复我们的代码问题。...在过去我们需要使用 lodash 这类库来实现这些功能,但是现在 lodash 的优势在慢慢减少。 当然这取决于你的用户是使用什么版本的浏览器和 JavaScript。...布尔运算符的错误使用大多数情况下我们都会使用布尔值来控制页面上某些元素的渲染,这是非常正常的事情。...第一种是使用条件判断代替三元表达式。...只有按照预期去使用工具,并且以优先使用 JavaScript 的方式,才能使我们创建出逻辑更清晰、功能更强大、性能更卓越的代码。
本文是作者在实际工作经验中总结提炼出的错误使用 React 的一些方式,希望能够帮助你摆脱这些相同的错误。 1....在过去我们需要使用 lodash 这类库来实现这些功能,但是现在 lodash 的优势在慢慢减少。 当然这取决于你的用户是使用什么版本的浏览器和 JavaScript。...布尔运算符的错误使用 大多数情况下我们都会使用布尔值来控制页面上某些元素的渲染,这是非常正常的事情。...第一种是使用条件判断代替三元表达式。...只有按照预期去使用工具,并且以优先使用 JavaScript 的方式,才能使我们创建出逻辑更清晰、功能更强大、性能更卓越的代码。
提前让函数退出代替嵌套条件分支 传递对象参数代替过长的参数列表 少用三目运算符 合理使用链式调用 分解大型类 活用位操作符 纯函数 本文会不断更新,不足之处欢迎评论区补充。...合理使用循环 如果多段代码实际上负责的是一些重复性的工作,那么可以用循环代替,使代码量更少。...传递对象参数代替过长的参数列表 函数参数过长那么就增加出错的风险,想保证传递的顺序正确就是一件麻烦的事,代码可读性也会变差,尽量保证函数的参数不会太长。如果必须传递多个参数的话,建议使用对象代替。...但不应该滥用三目运算符,我们应该在简单逻辑分支使用,在复杂逻辑分支避免使用。 // 简单逻辑可以使用三目运算符 var global = typeof window !...「缺点:」 链式调用带来的坏处就是在调试不方便,如果我们知道一条链中有错误出现,必须得先把这条链拆开才能加上一些调试 log 或者增加断点,这样才能定位错误出现的地方。
可以使用普通的 JS 对象来做。假设我们有这样一棵树: item 1 item 2 看起来很简单,对吧?...函数代替 React.createElement(…),那么我们也能使用JSX 语法。...函数代替 React.createElement(…),然后 Babel 就开始编译。'...但前提是我们得知道我们的节点在父元素上的索引,我们才能通过 $parent.childNodes[index] 得到该节点的引用。...你的点赞是我持续分享好东西的动力,欢迎点赞! 一个笨笨的码农,我的世界只能终身学习!
本指南将连接到以太坊区块链,因此使用了一个以太坊提供者。 提供者是用来代替自己运行区块链节点的。提供者有两个主要任务: 告诉你的应用程序要连接到什么区块链。...为了使这个应用程序正常工作,它需要按照以下罗列的顺序完成步骤: 使用一个以太坊 Provider 来验证区块链。 一旦通过认证,获取一个 DID,以便与 Ceramic 一起使用。...有一些小东西必须建立起来才能使这个应用程序完全工作。 完善引用 本节以及下一节配置 Webpack[56],与 Ceramic 没有必然联系。...按钮是如何工作的 应用程序的按钮元素将使用Event Listeners[57]来让它们被点击时执行功能。...这是正常的,没有什么可担心的。 最后一步是在终端或命令行中运行这个新添加的脚本。运行这个脚本就可以把以前所有的 JavaScript 打包成一个你的浏览器可以解释的版本。
console.log(i) } } 点击执行任务按钮会发现,我们不仅不能和输入框进行交互,连box容器区域的滚动也不再有响应,整个页面卡顿住了,直到load任务执行完成,页面才恢复响应,输入框才能正常使用...我知道了,长任务执行导致页面卡顿,使用任务切片的方式解决! 没错,这里确实是使用任务切片的方式能够解决!但是,我想问一下,任务切片解决卡顿问题的底层原理是什么样子的?...那么是什么导致了浏览器没有能够正常渲染呢?或许在探索真相之前,我们还需要先深入了解一下浏览器的事件循环机制! 浏览器事件循环机制 浏览器事件循环机制是一种用于处理异步任务的机制。...它的工作原理是不断地检查任务队列,执行队列中的任务,并等待新的任务加入。 执行顺序: 执行宏任务队列和微任务队列就不解释了。...正确的做法应该是我们点了很多菜(一个长任务),厨房做完一道菜(小任务执行),就端上来一道(渲染一次),这样分多次上菜(多个小任务多次渲染)才不会让顾客等待太久,也能提升用户体验。
来看下我是怎么改造它的: function calc() { // 获取id为num1的输入框 var num1El = document.getElementById('num1');...,会让XMLHttpRequest不能正常工作。...本地打开的html文件不能让XMLHttpRequest正常工作 下面这种形式才能正常工作: ? 需要以网址的方式访问 所以在创建我们的后端服务代码的时候,我们会同时来解决这件事情。...你可以通过VS Code来启动这个后端程序,在之前的文章中我已经告诉过大家怎么使用了;你也可以通过windows或Mac的命令行终端来运行这个server.js,方法就是在命令行中,进入你存放server.js...使用命令行终端运行 然后,打开你的浏览器,在地址栏输入http://localhost:8888,正常的话,就能看到'working!!!'了。 ?
什么是全局作用域,什么是局部作用域 ?...(id)方法获取“按钮”元素,才能针对“按钮”元素进行相应的操作; 鼠标点击“按钮”,需要为“按钮”元素绑定点击事件,可以用eleObj.onclick = function(){};来绑定点击事件;...获取到两个文本框中输入的内容 网页中存在着各种标签,需要利用document.getElementById(id)方法获取“文本框”元素,才能针对“文本框”元素进行相应的操作; 前面我们学过了用innerHTML...我想你应该知道怎么做了吧~ 优化代码 // 获取标签 var firstEle = document.getElementById...return parseInt(firstNum) + parseInt(secondNum); } 代码分析:封装好的sum功能函数在其它地方当中也能正常使用
[endif]--> 我很少使用hacker的,可能是个人习惯吧,我不喜欢写的代码ie不兼容,然后用hack来解决。不过hacker还是非常好用的。...解决办法:统一使用document.getElementById("idName"); 7、const问题 说明:Firefox下,可以使用const关键字或var关键字来定义常量; IE下,只能使用var...event.x : event.pageX;) 来代替IE下的event.x或者Firefox下的event.pageX. 9、window.location.href问题 说明:IE或者Firefox2.0...解决方法:使用window.location来代替window.location.href. 10、frame问题 以下面的frame为例: <frame src="xxx.html" id="...例如:parent.document.form1.filename.value="Aqing"; 11、innerText在IE中能正常工作,但在FireFox中却不行.
什么是内存泄漏 内存泄露是指一块被分配的内存既不能使用,又不能回收,直到浏览器进程结束。在 C++ 中,因为是手动管理内存,内存泄露是经常出现的事情。...而现在流行的 C# 和 Java 等语言采用了自动垃圾回收方法管理内存,正常使用的情况下几乎不会发生内存泄露。...自动垃圾收集是不能代替有效的内存管理的,特别是在大型,长时间运行的Web应用程序中。...的属性会让此对象变慢 var obj = {x: 'y'}; delete obj; // 此时 obj 会成一个慢对象 obj.x; var obj = {x: 'y'}; obj = null; // 应该这样...6、使用事件委托代替事件注册 页面中如果元素过多,且需要为每个元素注册相同的 click 事件,这个时候我们优先考虑到使用委托机制,将需要注册的 click 事件注册到元素的上层或者顶层元素,这样我们就节省了大量的
可以使用普通的 JS 对象来做。...如何用 JS 对象来表示呢?...函数代替 React.createElement(…),那么我们也能使用 JSX 语法。...函数代替 React.createElement(…),然后 Babel 就开始编译。’...总结 现在我们已经编写了虚拟 DOM 实现及了解它的工作原理。作者希望,在阅读了本文之后,对理解虚拟 DOM 如何工作的基本概念以及在幕后如何进行响应有一定的了解。
领取专属 10元无门槛券
手把手带您无忧上云