常见的软件bug引入bug的原因有哪些

这个报错是什么原因?
[问题点数:50分]
这个报错是什么原因?
[问题点数:50分]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2016年10月 Java大版内专家分月排行榜第一2016年9月 Java大版内专家分月排行榜第一2016年8月 Java大版内专家分月排行榜第一2014年4月 Java大版内专家分月排行榜第一
2016年11月 Java大版内专家分月排行榜第二
匿名用户不能发表回复!|开发中容易引入的BUG
时间: 02:37:14
&&&& 阅读:131
&&&& 评论:
&&&& 收藏:0
标签:&&&&&&&&&&&&&&&&&&&&&&&&以自己在开发引入的BUG为例
1.对一个列表中的元素用,来分隔:
public static String splitListByComma(List&String& dogs)
StringBuilder stringBuilder = new StringBuilder();
for (String dogName : dogs)
stringBuilder.append(dogName).append(",");
return stringBuilder.substring(0, stringBuilder.length() - 1);
BUG:当dogs为空列表时,最后一句会报越界错误(不考虑传入null的情况)。
修正后应该是
public static String splitListByComma(List&String& dogs)
if (dogs.isEmpty())
return "";
StringBuilder stringBuilder = new StringBuilder();
for (String dogName : dogs)
stringBuilder.append(dogName).append(",");
return stringBuilder.substring(0, stringBuilder.length() - 1);
标签:&&&&&&&&&&&&&&&&&&&&&&&&原文地址:http://www.cnblogs.com/CanWork/p/3866789.html
&&国之画&&&& &&&&chrome插件
版权所有 京ICP备号-2
迷上了代码!40条常见的移动端Web开发bug问题及答案
1、安卓浏览器看背景图片,有些设备会模糊。 用同等比例的图片在PC机上很清楚,但是手机上很模糊,原因是什么呢? 经过研究,是devicePixelRatio作怪,因为手机分辨率太小,如果按照
1、安卓浏览器看背景图片,有些设备会模糊。
用同等比例的图片在PC机上很清楚,但是手机上很模糊,原因是什么呢?
经过研究,是devicePixelRatio作怪,因为手机分辨率太小,如果按照分辨率来显示网页,这样字会非常小,所以苹果当初就把iPhone 4的960640分辨率,在网页里只显示了480320,这样devicePixelRatio=2。现在android比较乱,有1.5的,有2的也有3的。
想让图片在手机里显示更为清晰,必须使用2x的背景图来代替img标签(一般情况都是用2倍)。例如一个div的宽高是100100,背景图必须得200200,然后background-size:,这样显示出来的图片就比较清晰了。
代码可以如下:
background:url(../images/icon/all.png) no-
-webkit-background-size:50px 50
background-size: 50px 50display:inline- width:100%; height:50&
或者指定 background-size:都可以,大家试试!
2、图片加载
若您遇到图片加载很慢的问题,对这种情况,手机开发一般用canvas方法加载:
具体的canvas API 参见:http://javascript.ruanyifeng.com/htmlapi/canvas.html
下面举例说明一个canvas的例子:
&li&&canvas&&/canvas&&/li&
js动态加载图片和li 总共举例17张图片!
var total=17;
var zWin=$(window);
var render=function(){
&&var padding=2;
&&var winWidth=zWin.width();
&&var picWidth=Math.floor((winWidth-padding*3)/4);
&&var tmpl ='';
&&for (var i=1;i&=i++){
&&var imgSrc='img/'+i+'.jpg';
&&if(i%4==1){
&&tmpl +='&li style=&width:'+picWidth+'height:'+picWidth+'padding-left:'+p+'padding-top:'+padding+'&&&canvas id=&cvs_'+i+'&&&/canvas&&/li&';
&&var imageObj = new Image();
&&imageObj.index =
&&imageObj.onload = function(){
&&&&var cvs =$('#cvs_'+this.index)[0].getContext('2d');
&&&&cvs.width = this.
&&&&cvs.height=this.
&&&&cvs.drawImage(this,0,0);
&&imageObj.src=imgS
3、假如手机网站不用兼容IE浏览器,一般我们会使用zeptojs。zeptojs内置Touch events方法,具体可以看http://zeptojs.com/#Touch events
看了一下zeptio新版的API,已经支持IE10以上浏览器,对zeptojs可以选择使用!
4、防止手机中网页放大和缩小,这点是最基本的,最为手机网站开发者来说应该都知道的,就是设置meta中的viewport
还有就是,有些手机网站我们看到如下声明:
&!DOCTYPE html PUBLIC &-//WAPFORUM//DTD XHTML Mobile 1.0//EN& &http://www.wapforum.org/DTD/xhtml-mobile10.dtd&&
设置了DTD的方式是XHTML的写法,假如我们页面运用的是html5,可以不用设置DTD,直接声明&!DOCTYPE html&。
使用viewport使页面禁止缩放。 通常把user-scalable设置为0来关闭用户对页面视图缩放的行为。
&meta name=&viewport& content=&user-scalable=0& /&
但是为了更好的兼容,我们会使用完整的viewport设置。
&meta name=&viewport& content=&width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=0& /&
当然,user-scalable=0,有的人也写成user-scalable=no,都可以的。
5、apple-mobile-web-app-capable
apple-mobile-web-app-capable是设置Web应用是否以全屏模式运行。
&meta name=&apple-mobile-web-app-capable& content=&yes&&
如果content设置为yes,Web应用会以全屏模式运行,反之,则不会。content的默认值是no,表示正常显示。你可以通过只读属性window.navigator.standalone来确定网页是否以全屏模式显示。
6、format-detection
format-detection 启动或禁用自动识别页面中的电话号码。
&meta name=&format-detection& content=&telephone=no&&
默认情况下,设备会自动识别任何可能是电话号码的字符串。设置telephone=no可以禁用这项功能。
7、html5调用安卓或者ios的拨号功能
html5提供了自动调用拨号的标签,只要在a标签的href中添加tel:就可以了。
&a href=&tel:,1034&&400-810-6999 转 1034&/a&
拨打手机直接如下
&&a href=&tel:&&点击拨打&/a&
8、html5GPS定位功能
具体请看:http://www.jb51.net/post/html5_GPS_getCurrentPosition
9、上下拉动滚动条时卡顿、慢
&&-webkit-overflow-scrolling:
&&overflow-scrolling:
Android3+和iOS5+支持CSS3的新属性为overflow-scrolling
10、禁止复制、选中文本
&&-webkit-user-select: none;
&&-moz-user-select: none;
&&-khtml-user-select: none;
&&&user-select: none;
解决移动设备可选中页面文本(视产品需要而定)
11、长时间按住页面出现闪退
&&-webkit-touch-callout: none;
12、iphone及ipad下输入框默认内阴影
&&-webkit-appearance: none;
13、ios和android下触摸元素时出现半透明灰色遮罩
&&-webkit-tap-highlight-color:rgba(255,255,255,0)
设置alpha值为0就可以去除半透明灰色遮罩,备注:transparent的属性值在android下无效。
后面一篇文章有详细介绍,地址:http://www.jb51.net/post/phone_web_ysk
14、active兼容处理 即 伪类 :active 失效
方法一:body添加ontouchstart
&body ontouchstart=&&&
方法二:js给 document 绑定 touchstart 或 touchend 事件
&color: #000;
a:active {
&a herf=foo &bar&/a&
&document.addEventListener('touchstart',function(){},false);
15、动画定义3D启用硬件加速
&&-webkit-transform:translate3d(0, 0, 0)
&&transform: translate3d(0, 0, 0);
注意:3D变形会消耗更多的内存与功耗
16、Retina屏的1px边框
&&border-width: thin;
17、webkit mask 兼容处理
某些低端手机不支持css3 mask,可以选择性的降级处理。
比如可以使用js判断来引用不同class:
if( 'WebkitMask' in document.documentElement.style){
&&alert('支持mask');
&&alert('不支持mask');
18、旋转屏幕时,字体大小调整的问题
html, body, form, fieldset, p, div, h1, h2, h3, h4, h5, h6 {
&&-webkit-text-size-adjust:100%;
19、transition闪屏
/设置内嵌的元素在 3D 空间如何呈现:保留3D /
-webkit-transform-style: preserve-3d;
/ 设置进行转换的元素的背面在面对用户时是否可见:隐藏 /
-webkit-backface-visibility:hidden;
20、圆角bug
某些Android手机圆角失效
background-clip: padding-
21、顶部状态栏背景色
&meta name=&apple-mobile-web-app-status-bar-style& content=&black& /&
除非你先使用apple-mobile-web-app-capable指定全屏模式,否则这个meta标签不会起任何作用。
如果content设置为default,则状态栏正常显示。如果设置为blank,则状态栏会有一个黑色的背景。如果设置为blank-translucent,则状态栏显示为黑色半透明。如果设置为default或blank,则页面显示在状态栏的下方,即状态栏占据上方部分,页面占据下方部分,二者没有遮挡对方或被遮挡。如果设置为blank-translucent,则页面会充满屏幕,其中页面顶部会被状态栏遮盖住(会覆盖页面20px高度,而iphone4和itouch4的Retina屏幕为40px)。默认值是default。
22、设置缓存
&meta http-equiv=&Cache-Control& content=&no-cache& /&
手机页面通常在第一次加载后会进行缓存,然后每次刷新会使用缓存而不是去重新向服务器发送请求。如果不希望使用缓存可以设置no-cache。
23、桌面图标
&link rel=&apple-touch-icon& href=&touch-icon-iphone.png& /&
&link rel=&apple-touch-icon& sizes=&76x76& href=&touch-icon-ipad.png& /&
&link rel=&apple-touch-icon& sizes=&120x120& href=&touch-icon-iphone-retina.png& /&
&link rel=&apple-touch-icon& sizes=&152x152& href=&touch-icon-ipad-retina.png& /&
iOS下针对不同设备定义不同的桌面图标。如果不定义则以当前屏幕截图作为图标。
上面的写法可能大家会觉得会有默认光泽,下面这种设置方法可以去掉光泽效果,还原设计图的效果!
&link rel=&apple-touch-icon-precomposed& href=&touch-icon-iphone.png& /&
图片尺寸可以设定为5757(px)或者Retina可以定为114114(px),ipad尺寸为72*72(px)
24、启动画面
&link rel=&apple-touch-startup-image& href=&start.png&/&
iOS下页面启动加载时显示的画面图片,避免加载时的白屏。
可以通过madia来指定不同的大小:
&!--iPhone--&
&link href=&apple-touch-startup-image-320x460.png& media=&(device-width: 320px)& rel=&apple-touch-startup-image& /&
&!-- iPhone Retina --&
&link href=&apple-touch-startup-image-640x920.png& media=&(device-width: 320px) and (-webkit-device-pixel-ratio: 2)& rel=&apple-touch-startup-image& /&
&!-- iPhone 5 --&
&link rel=&apple-touch-startup-image& media=&(device-width: 320px) and (device-height: 568px) and (-webkit-device-pixel-ratio: 2)& href=&apple-touch-startup-image-640x1096.png&&
&!-- iPad portrait --&
&link href=&apple-touch-startup-image-768x1004.png& media=&(device-width: 768px) and (orientation: portrait)& rel=&apple-touch-startup-image& /&
&!-- iPad landscape --&
&link href=&apple-touch-startup-image-748x1024.png& media=&(device-width: 768px) and (orientation: landscape)& rel=&apple-touch-startup-image& /&
&!-- iPad Retina portrait --&
&link href=&apple-touch-startup-image-.png& media=&(device-width: 1536px) and (orientation: portrait) and (-webkit-device-pixel-ratio: 2)& rel=&apple-touch-startup-image& /&
&!-- iPad Retina landscape --&
&link href=&apple-touch-startup-image-.png&media=&(device-width: 1536px) and (orientation: landscape) and (-webkit-device-pixel-ratio: 2)&rel=&apple-touch-startup-image& /&
25、浏览器私有及其它meta
以下属性在项目中没有应用过,可以写一个demo测试以下!
QQ浏览器私有
&meta name=&x5-fullscreen& content=&true&&
&meta name=&x5-orientation& content=&portrait&&
&meta name=&x5-orientation& content=&landscape&&
&meta name=&x5-page-mode& content=&app&&
UC浏览器私有
&meta name=&full-screen& content=&yes&&
&meta name=&screen-orientation& content=&portrait&&
&meta name=&screen-orientation& content=&landscape&&
&meta name=&browsermode& content=&application&&
针对手持设备优化,主要是针对一些老的不识别viewport的浏览器,比如黑莓
&meta name=&HandheldFriendly& content=&true&&
微软的老式浏览器
&meta name=&MobileOptimized& content=&320&&
windows phone 点击无高光
&meta name=&msapplication-tap-highlight& content=&no&&
26、 IOS中input键盘事件keyup、keydown、keypress支持不是很好
问题是这样的,用input search做模糊搜索的时候,在键盘里面输入关键词,会通过ajax后台查询,然后返回数据,然后再对返回的数据进行关键词标红。用input监听键盘keyup事件,在安卓手机浏览器中是可以的,但是在ios手机浏览器中变红很慢,用输入法输入之后,并未立刻相应keyup事件,只有在通过删除之后才能相应!
解决办法:
可以用html5的oninput事件去代替keyup
&input type=&text& id=&testInput&&
&script type=&text/javascript&&
&&document.getElementById('testInput').addEventListener('input', function(e){
&&&&var value = e.target.
然后就达到类似keyup的效果!
27、h5网站input 设置为type=number的问题
h5网页input 的type设置为number一般会产生三个问题,一个问题是maxlength属性不好用了。另外一个是form提交的时候,默认给取整了。三是部分安卓手机出现样式问题。
问题一解决,我目前用的是js。如下
&input type=&number& oninput=&checkTextLength(this ,10)&&
function checkTextLength(obj, length) {&
&&&&&&if(obj.value.length & length)& {&&&&
&&&&&&&&obj.value = obj.value.substr(0, length);&
问题二,是因为form提交默认做了表单验证,step默认是1,要设置step属性,假如保留2位小数,写法如下:
&input type=&number& step=&0.01& /&
关于step,我在这里做简单的介绍,input 中type=number,一般会自动生成一个上下箭头,点击上箭头默认增加一个step,点击下箭头默认会减少一个step。number中默认step是1。也就是step=0.01,可以允许输入2位小数,并且点击上下箭头分别增加0.01和减少0.01。
假如step和min一起使用,那么数值必须在min和max之间。
看下面的例子:
&input type=&number& step=&3.1& min=&1& /&
输入框可以输入哪些数字?
首先,最小值是1,那么可以输入1.0,第二个是可以输入(1+3.1)那就是4.1,以此类推,每次点击上下箭头都会增加或者减少3.1,输入其他数字无效。这就是step的简单介绍。
问题三,去除input默认样式
input[type=number] {
&&-moz-appearance:
input[type=number]::-webkit-inner-spin-button,
input[type=number]::-webkit-outer-spin-button {
&&-webkit-appearance: none;
&&margin: 0;
28、ios 设置input 按钮样式会被默认样式覆盖
解决方式如下:
textarea {
&&border: 0;
&&-webkit-appearance:
设置默认样式为none
29、IOS键盘字母输入,默认首字母大写
解决方案,设置如下属性
&input type=&text& autocapitalize=&off& /&
30、select 下拉选择设置右对齐
设置如下:
select option {
direction:
31、通过transform进行skew变形,rotate旋转会造成出现锯齿现象
可以设置如下:
-webkit-transform: rotate(-4deg) skew(10deg) translateZ(0);
&transform: rotate(-4deg) skew(10deg) translateZ(0);
&outline: 1px solid rgba(255,255,255,0)
32、移动端点击300ms延迟
300ms尚可接受,不过因为300ms产生的问题,我们必须要解决。300ms导致用户体验并不是很好,解决这个问题,我们一般在移动端用tap事件来取代click事件。
推荐两个js,一个是fastclick,一个是tap.js
关于300ms延迟,具体请看:http://thx.github.io/mobile/300ms-click-delay/
33、移动端点透问题
案例如下:
&div id=&haorooms&&点头事件测试&/div&
&a href=&www.jb51.net&&www.jb51.net&/a&
div是绝对定位的蒙层,并且z-index高于a。而a标签是页面中的一个链接,我们给div绑定tap事件:
$('#haorooms').on('tap',function(){
$('#haorooms').hide();
我们点击蒙层时 div正常消失,但是当我们在a标签上点击蒙层时,发现a链接被触发,这就是所谓的点透事件。
touchstart 早于 touchend 早于click。 亦即click的触发是有延迟的,这个时间大概在300ms左右,也就是说我们tap触发之后蒙层隐藏, 此时 click还没有触发,300ms之后由于蒙层隐藏,我们的click触发到了下面的a链接上。
(1)尽量都使用touch事件来替换click事件。例如用touchend事件(推荐)。
(2)用fastclick,https://github.com/ftlabs/fastclick
(3)用preventDefault阻止a标签的click
(4)延迟一定的时间(300ms+)来处理事件 (不推荐)
(5)以上一般都能解决,实在不行就换成click事件。
下面介绍一下touchend事件,如下:
$(&#haorooms&).on(&touchend&, function (event) {
&&&event.preventDefault();
34、消除 IE10 里面的那个叉号
input:-ms-clear{display:none;}
35、关于 iOS 与 OS X 端字体的优化(横竖屏会出现字体加粗不一致等)
iOS 浏览器横屏时会重置字体大小,设置 text-size-adjust 为 none 可以解决 iOS 上的问题,但桌面版 Safari 的字体缩放功能会失效,因此最佳方案是将 text-size-adjust 为 100% 。
-webkit-text-size-adjust: 100%;
-ms-text-size-adjust: 100%;
text-size-adjust: 100%;
36、关于 iOS 系统中,中文输入法输入英文时,字母之间可能会出现一个六分之一空格
可以通过正则去掉
this.value = this.value.replace(/\u2006/g, '');
37、移动端 HTML5 audio autoplay 失效问题
这个不是 BUG,由于自动播放网页中的音频或视频,会给用户带来一些困扰或者不必要的流量消耗,所以苹果系统和安卓系统通常都会禁止自动播放和使用 JS 的触发播放,必须由用户来触发才可以播放。
解决方法思路:先通过用户 touchstart 触碰,触发播放并暂停(音频开始加载,后面用 JS 再操作就没问题了)。
解决代码:
document.addEventListener('touchstart', function () {
&&document.getElementsByTagName('audio')[0].play();
&&document.getElementsByTagName('audio')[0].pause();
38、移动端 HTML5 input date 不支持 placeholder 问题
这个我感觉没有什么好的解决方案,用如下方法
&input placeholder=&Date& class=&textbox-n& type=&text& onfocus=&(this.type='date')&& id=&date&&
有的浏览器可能要点击两遍!
39、部分机型存在type为search的input,自带close按钮样式修改方法
有些机型的搜索input控件会自带close按钮(一个伪元素),而通常为了兼容所有浏览器,我们会自己实现一个,此时去掉原生close按钮的方法为
#Search::-webkit-search-cancel-button{
&&display: none;&
如果想使用原生close按钮,又想使其符合设计风格,可以对这个伪元素的样式进行修改。
40、唤起select的option展开
zepto方式:
$(sltElement).trrgger(&mousedown&);
原生js方式:
function showDropdown(sltElement) {
&&event = document.createEvent('MouseEvents');
&&event.initMouseEvent('mousedown', true, true, window);
&&sltElement.dispatchEvent(event);
(责任编辑:admin)
------分隔线----------------------------
1、简单描述下 微信小程序的相关文件类型? 答:微信小程序项...
position的值, relative和absolute分别是相对于谁进行定位的?absol...
面试题按类型来分,主要涉及到技术与非技术两大类,今天我们...
前端页面由哪三层构成,分别是什么,作用是什么清除浮动的方...
1.引入css样式的方式有哪几种?四中方式,重点注意权重和导入...
本文由我收集总结了一些前端面试题,初学者阅后也要用心钻研...
关注奔三路小程序,方便你我他10个JavaScript常见BUG及修复方法 - A5创业网
扫一扫,联系编辑获得审核机会
符合以下要求,获得报道机会
1. 新公司求报道
2. 好项目求报道
3. 服务商求报道
4. 投资融资爆料
客服热线:400-995-7855
当前位置:&&&
10个JavaScript常见BUG及修复方法
& 08:53&&来源:segmentfault&
  如今网站几乎100%使用JavaScript。JavaScript看上去是一门十分简单的语言,然而事实并不如此。它有很多容易被弄错的细节,一不注意就导致BUG。
  1. 错误的对this进行引用
  在闭包或则回调中, this 关键字的作用域很容易弄错。举个例子:
  Game.prototype.restart = function () {
  this.clearLocalStorage();
  this.timer = setTimeout(function() {
  this.clearBoard(); // 此处this指的是?
  }, 0);
  如果执行上面的代码,我们会看到报错:
  Uncaught TypeError: undefined is not a function
  出错的原因在于:当你调用 setTimeout 函数,你实际上调用的是 window.setTimeout() 。在 setTimeout 中传入的匿名函数是在 window 这个对象环境下,所以 this 是指向 window ,但是 window 并没有 clearBoard 方法。
  如何解决呢?定义新的变量引用指向 Game 对象的 this ,然后就可以使用啦。
  Game.prototype.restart = function () {
  this.clearLocalStorage();
  var self = // 将this指向的对象绑定到self
  this.timer = setTimeout(function(){
  self.clearBoard();
  }, 0);
  或则使用 bind() 函数:
  Game.prototype.restart = function () {
  this.clearLocalStorage();
  this.timer = setTimeout(this.reset.bind(this), 0); // bind to 'this'
  Game.prototype.reset = function(){
  this.clearBoard(); // 此处this的引用正确
  2. 和块作用域(block scope)有关的BUG
  在大多数程序语言中,每一个函数块都有一个独立的新的作用域,但是在JavaScript中并不是。例如:
  for (var i = 0; i & 10; i++) {
  /* ... */
  console.log(i); // 会输出什么呢?
  通常在这种情况下,调用 console.log() 会输出 undefined 或则报错。不过呢,这里会输出 10 。在JavaScript中,即使for循环已经结束,变量 i 依然存在,并且记录最后的值。有些开发者会忘记这一点,然后导致许多bug。我们可以使用 let 而不是 for 来杜绝这一问题。
  3. 内存泄漏
  你需要监控内存使用量,因为泄露很难避免。内存泄露可能由于引用不存在的对象或则循环引用导致。
  如何避免:关注对象的可访问性(reachability)。
  可访问的对象:
  现有的call stack任何位置可以访问的对象
  全局对象
  当一个对象可以通过引用访问到,那么会在内存中保存。浏览器的垃圾回收器仅仅会把那些不可访问的对象回收。
  4. 混淆的相等判断
  JavaScript自动将所有在布尔环境下的变量类型转换为布尔类型,但是可能导致bug。举例:
  // 所有都是true
  console.log(false == '0');
  console.log(null == undefined);
  console.log(" \t\r\n" == 0);
  console.log('' == 0);
  // 注意:下面两个也是
  if ({}) // &
  if ([]) // &
  {} 和 [] 都是对象,他们都会被转换为true。为了防止bug出现,推荐使用 === 和 !== 来做比较,因为不会隐式做类型转换。
  5. 低效的DOM操作
  在JavaScript中,你可以轻松操作DOM(添加、修改和删除),但是开发者往往很低效地去操作。这会导致bug出现,因为这些操作非常耗费计算资源。为了解决这个问题,推荐使用文档碎片(Document Fragment),如果你需要操作多个DOM元素。
  广告: 你的线上代码真的没有BUG吗?欢迎免费使用 Fundebug !我们可以帮助您第一时间发现BUG!
  6. 在for循环中错误的定义函数
  举例:
  var elements = document.getElementsByTagName('input');
  var n = elements. // 假设我们有10个元素
  for (var i = 0; i & i++) {
  elements[i].onclick = function() {
  console.log("元素编号#" + i);
  如果我们有10个元素,那么点击任何一个元素都会显示&元素编号#10&!因为在 onclick 被调用的时候,for循环已经结束,因此所有的i都是10。
  解法:
  var elements = document.getElementsByTagName('input');
  var n = elements. // 假设有10个元素
  var makeHandler = function(num) { // outer function
  return function() { // inner function
  console.log("元素编号##" + num);
  for (var i = 0; i & i++) {
  elements[i].onclick = makeHandler(i+1);
  makeHandler 在for循环执行的时候立即被调用,获取到当前的值 i+1 ,并且存储在变量 num中。 makeHandler 返回一个函数使用 num 变量,该函数被绑定到元素的点击事件。
  7. 通过原型错误地继承
  开发者如果没能正确理解继承的原理,那么就可能写出有bug的代码:
  BaseObject = function(name) {
  if(typeof name !== "undefined") {
  this.name =
  } else {
  this.name = 'default'
  var firstObj = new BaseObject();
  var secondObj = new BaseObject('unique');
  console.log(firstObj.name); // -& 输出'default'
  console.log(secondObj.name); // -& 输出'unique'
  但是,如果我们做如下操作:
  delete secondObj.
  那么:
  console.log(secondObj.name); // -& 输出'undefined'
  而我们实际上想要的结果是打印默认的name。
  BaseObject = function (name) {
  if(typeof name !== "undefined") {
  this.name =
  BaseObject.prototype.name = 'default';
  每一个 BaseObject 都继承 name 属性,并且默认值为 default 。此时如果 secondObj 的 name 属性被删除掉,通过原型链查找会返回正确的默认值。
  var thirdObj = new BaseObject('unique');
  console.log(thirdObj.name); // -& 输出'unique'
  delete thirdObj.
  console.log(thirdObj.name); // -& 输出'default'
  8. 实例方法中的无效引用
  我们来实现一个简单的构造函数用来创建对象:
  var MyObject = function() {}
  MyObject.prototype.whoAmI = function() {
  console.log(this === window ? "window" : "MyObj");
  var obj = new MyObject();
  为了使用方便,我们定义变量 whoAmI 来引用 obj.whoAmI :
  var whoAmI = obj.whoAmI;
  打印出来看看:
  console.log(whoAmI);
  控制台会输出:
  function () {
  console.log(this === window ? "window" : "MyObj");
  现在我们来对比一下两者调用的区别:
  obj.whoAmI(); // 输出"MyObj" (和期望一致)
  whoAmI(); // 输出"window" (竟然输出了window)
  当我们把 obj.whoAmI 赋值给 whoAmI 的时候,这个新的变量 whoAmI 是定义在全局下,因此 this 指向全局的 window ,而不是 MyObj 。如果我们真的要获取对 MyObj 的函数的引用,需要在其作用域下。
  var MyObject = function() {}
  MyObject.prototype.whoAmI = function() {
  console.log(this === window ? "window" : "MyObj");
  var obj = new MyObject();
  obj.w = obj.whoAmI; // 任然在obj的作用域
  obj.whoAmI(); // 输出"MyObj"
  obj.w(); // 输出"MyObj"
  9. setTimeout/setInterval函数第一个参数误用字符串
  如果你将一个字符串作为setTimeout/setTimeInterval,它会被传给函数构造函数并构建一个新的函数。该操作流程很慢而且低效,并导致bug出现。
  var hello = function(){
  console.log("hello, fundebug !");
  setTimeout("hello", 1000);
  一个好的替代方法就是传入函数作为参数:
  setInterval(logTime, 1000); // 将logTime函数传入
  setTimeout(function() { // 传入一个匿名函数
  logMessage(msgValue);
  }, 1000);
  10. 未能成功使用strict mode
  使用strict model会增加很多限制条件来加强安全和防止某些错误的出现,如果不使用 strict mode ,你就相当于少了一个得力的助手帮你避免错误:
  更加容易debug
  避免不小心定义了不该定义的全局变量
  避免this隐式转换
  避免属性名字或则参数值的重复使用
  eval()更加安全
  无效地使用delete会自动抛出错误
  版权声明:
  转载时请注明作者Fundebug以及本文地址:
  https://blog.fundebug.com//top_10_bugs_and_fixing_method/
扫一扫关注A5创业网公众号
责任编辑:西瓜
现在大家对企业网站并不陌生,但是有多少真正的了解企业网站建设的流程,网络上成千上亿个网站,有多少是僵尸网站,有多少给企业带来订单效益。
企业自助建站与传统的建站模式相比,操作上更加简单、维护方便。普通人不必懂专业技术,且无需专业的后台程序开发和数据库开发人员,只要会操作电脑,甚至可以在一两个小时内完成一个企业网站的建设,更可自行维护
前面小编已经为大家分享了《新手搭建DEDE织梦网站的详细操作流程》,为了让大家对DedeCMS织梦网站的建设有更深层次的了解,小编今天就以本地服务器详细介绍下网站目录及后台的基本操作详解。
网站设计不是一蹴而就的事情,设计中有诸多细节需要精雕细琢,无论经验多么丰富的设计师设计出来的网站都不能保证让人百之百之满意,往往在网站设计完成交给客户验收后,各种各样的要求接踵而来,几经修改之后,面目全非,在客户一会这样,一会那样的要求下尽可能的把握设计的每个细节,做出让客户满意的网站,所以网站设计
关于网站建设中不成文的规范说完了,但网站建设后的日常维护与更新还是必须要有的,有些企业在官网建设完工后就放任不管,甚至用户浏览时发现默认的图片都没有更换,给人年久失修的感觉
米拓企业建站系统,自2009年推出第一个版本以来,用10年时间专注于做一件事:为中小企业提供快速、高端、开源的建站服务。米拓企业建站系统,是一款开源的PHP网站管理系统,程序功能完善、简单易用、安全稳定,
创业浪潮凶猛,行业竞争也趋于白热化,互联网创业也就成为了创业的首选项目,据悉,目前国内网民规模达7.72亿人,所以创业者们一定要顺应时代跟上发展的浪潮!
字体作为建网站中的主要组成部分,在使用字体时必须注重字体的选择,合理的采用字体能为网站提升不少浏览体验,毕竟网站除了图片就是文字了,视频占比较小,网站中的字体作为基本组成部分,如何合理的使用才能符合大众的审美是值得探讨的。
百度力推无广告的简单搜索,热闹一个星期之后,也就过去了,没有广告的搜索,并不完美,广告在百度相关产品中其实是无处不在的,不过有一个地方百度是从来不做广告的,那就是百度首页,一个搜索框,然后加上百度一下,据说这个首页打开的速度不会超过三秒
企业一谈到网站制作项目,就会想到预算多少,由于网站制作时各个项目开支是弹性的,可大可小,如网站空间、程序制作、域名等都可能造成整个项目超支,制作方案里定下的预算通常不知不觉就超支了,这就需要在网站制作中对预算进行合理的把控!
创业好项目
写了4年多博客 我选择了从头再来
扫描二维码关注A5创业网了解最新创业资讯服务
&徐州八方网络科技有限公司&版权所有&
举报投诉邮箱:
扫一扫关注最新创业资讯

我要回帖

更多关于 前端常见bug 的文章

 

随机推荐