JavaScript的兼容小坑和调试小技巧

JavaScript作为一种弱类型编程语言,入门简单,只要稍微注意一下IE方面的兼容性,就可以很好的使用它。

本文主要是对IE兼容的小坑和调试的小技巧进行举例分析,并给出解决方法。

1、var str; 与 var str = “”;的区别

 1 <script>
 2  var Str1;
 3 for (var i = 0; i < 3; i++)
 4 {  Str1 += "xxx"         }
 5 alert(Str1);
 6 var Str2 = "";
 7 for (var i = 0; i < 3; i++)
 8 { Str2 += "xxx"            }
 9 alert(Str2);
10 </script>

一个变量,如果定义的时候不赋值,那么就是undefined,但是不会报错。 即使加了字符串,也是undefined,因此定义一个变量的的时候要赋值。

2、参数列表末尾的逗号

在做前后端交互用到$.ajax({})的时候,通常要传递一些数据,这些数据以键值对的形式存在,中间用逗号隔开,但是如果最后一个参数对后面还是有逗号,以逗号结尾,在IE上就会报错,逗号后面的JS都会失效。

data:{
          "name": demo,
          "age": 16,  //这里的16后面如果有逗号,IE就会报错,其他浏览器正常
        },

解决方案,最后一个参数后面什么也不带,不带小尾巴

 3、const与var

在火狐下面const与var都可以定义变量,const定义的变量不能修改,因此用它来定义常量,在初始化的时候必须初始化,var定义的变量就比较灵活,可以修改。

但是在ie下,只能用var来定义常量。

4、event.X与event.Y的问题

在ie下,event对象具有x,y属性,但是没有pageX和pageY的属性,

在Firefox下,event对象有pageX,PageY属性,但是没有x,y属性。

解决方法:使用mX(mX = event.x ? event.x : event.pageX;)来代替IE下的event.x或者Firefox下的event.pageX.

5、清除IE缓存的两种方式

第一、就是引入JS的时候,在后面加个new Date()

 <script type="text/javascript" src="/123.js?new Date()"></script>

第二、就是在index.html的头部写入以下代码

1 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
2 <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
3 <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
4 <meta http-equiv="Cache-control" content="no-cache">
5 <META HTTP-EQUIV="Pragma" CONTENT="no-cache">
6 <meta http-equiv="Cache" content="no-cache">
7 <meta http-equiv="Expires" content="0">

原文地址:https://www.cnblogs.com/chongzixing/p/9255631.html

时间: 2024-10-18 13:05:23

JavaScript的兼容小坑和调试小技巧的相关文章

韩顺平_轻松搞定网页设计(html+css+javascript)_第34讲_js超级玛丽小游戏

韩顺平_轻松搞定网页设计(html+css+javascript)_第34讲_js超级玛丽小游戏_学习笔记_源代码图解_PPT文档整理 分类: PHP 2012-12-12 15:01 4256人阅读 评论(0) 收藏 举报 文西马龙:http://blog.csdn.net/wenximalong/ 采用面向对象思想设计超级马里奥游戏人物(示意图) 怎么用通过按键,来控制图片的位置 这个小游戏,用面向对象会很方便,不用面向对象会很麻烦很麻烦,比如以后要讲解的坦克大战的游戏,要是用纯的面向过程或

mciSendString 的两个小坑

刚刚修正了自己用的小闹钟的代码. 坑1:REPEAT 选项的作用范围 原来用得好好的,之后选择 .wav 文件,居然不出声音了…… 诶,MCI 肯定支持 .wav 的啊…… 仔细想想,我以前都是选 .mp3 作为闹铃,和这个有关系吗? 查看源代码. strSend = "PLAY " & STRING_SOUND_ALIAS & " REPEAT" Call mciSendString(strSend, rbuf, 0, 0) 为了将我从睡梦中闹醒(

解决Druid设置Oracle的Clob字段时的小坑

众所周知,Oracle有很多坑, 所以才有了去IOE. 在使用Druid做数据库连接池后,其实偶尔也会碰到小坑,这就是使用开源项目所必须去填平的.[如果使用不开源的产品,那就不是坑,而是陷阱了,你都不知道怎么去填坑] 用Druid连接池,通过JDBC往Oracle数据库的Clob字段插入数据,或者更新数据时,一个问题出现了. 类似于这样: Caused by: java.lang.ClassCastException: com.alibaba.druid.proxy.jdbc.ClobProxy

支付宝集成的小坑--集成支付宝集成总结(1)

现在很多公司的APP都会有支付环节,特别是现在的O2O项目,我参与过的近两个项目都有集成支付宝对两次集成做一下总结: 第一次集成支付宝,由于我们的做后台的大牛写了十几年代码,而且以前是银行项目的总监,整个支付流程基本上一切听大牛的,我按照做就行.基本上按照支付宝的流程走,支付环节没怎么出问题,总体来说支付流程比较perfect. 第一次集成的小坑: 1)无非就是支付宝里面使用了一些框架如SBJson 等常用的开源框架,而我们项目中也会用到SBJson类似的框架,估计会出现冲突 冲突的解决办法:A

Windows7驱动调试小Tips

v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);}/* Style Definitions */ table.MsoNormalTable {mso-style-name:普通表格; mso-tstyle-rowband-size:0; mso-tstyle-colb

一个关于Windows下SetCursorPos和GetCursorPos的小坑

这两天在做一个编辑特定格式Mesh的小工具,需要检查鼠标的移动,一般来说可以用WM_MOUSEMOVE事件解决的,但是我为了省事用了定时查询+设置的方式,也就是: 1 void Frame(void) 2 { 3 //do something else... 4 5 POINT cursorPos; 6 GetCursorPos(&cursorPos); 7 curMoveX = cursorPos.x - cursorBaseX; 8 curMoveY = cursorPos.y - curs

C#中的Infinity有个小坑

(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 昨天家里有事,上网也不方便,就没有推送文章.今天很累,也不长篇大论了.简单介绍一下最近遇到的一个小坑. 我们知道,在C#中主要有如下几种数值类型:int.long.decimal.float和double.对于前三种,如果除零,那么会提示表达式错误(直接书写数字)或报DivideByZeroException异常(使用变量):对于后面两种,除零会得到正负无穷大,除非你是0.0/0.0那么会得到NaN

bottle的几个小坑

距离我在<web.py应用工具库:webpyext>里说要换用bottle,已经过去快两个月了--事实上在那之前我已经開始着手在换了.眼下那个用于 Backbone.js 介绍的样例程序已经完毕更换,其他一些原来基于web.py的应用也在逐步重写中.期间各种小坑不断,还好至今还没有碰到什么大坑--只是目測应该也不会有大坑. unicode 作为非英文应用的开发人员,unicode是一个绕只是去的坑. web.py 对此是不作处理的,全都按原编码方式处理. bottle 则作了一个有点奇怪的处理

CI load-&gt;view();的一个小坑。。。

CI load->view()  很智能,如果加载多个视图  他会全部读完再按顺序载入所有视图 但这里有一个小坑,底层会遍历你的函数,看有多少视图 再决定当前的视图是否为最后一个, 如果你的代码中有die exit这个的语句, 这个遍历就会被近中止, 所有的视图就都不会执行 切记 切记.. 如果想要中断这种机制,  直接执行视图,不执行下面的语句, : 加上$this->output->_display();就好了 但是这样就会失去灵活性. 谨慎用.