一.今天做点击按钮验证邮箱时,遇到以下几个问题:

  (1)点击按钮后,执行if(regExp.test(str)),出现一种奇怪的现象:第一次输入正确邮箱验证通过,第二次输入正确邮箱就返回false,第三次又验证通过....

自己百思不得其解,直接找老大调试。老大用谷歌自带调试工具弄了20分钟,也没找到原因。

后面自己通过百度搜索和360搜索都没搜到,用https://g.ttlsa.com/一搜,就找到了原因。原因是regExp.lastIndex惹的货。原来老大和我因为时间太长,忘记了这个东西,这是正则里面很简单的问题。

只要regExp里面的正则表达式包含g属性(也就是全局属性),那么regExp就会保存上次的lastIndex值。因此就出现:

第一次验证通过后,由于设置了g属性,因此lastIndex值就变成了str的长度。    第二次验证时,直接从lastIndex开始,因此就会返回false。这时lastIndex就会变成0.第三次验证时,又可以验证通过。

解决办法:在if语句里面,执行regExp.lastIndex=0,就可以解决这个问题了。

  (2)在事件委托时,需要判断target是否是I标签,我用的是if(target == $("i")[0])。老大说:你应该通过if($(target).prop("nodeName") == "I")去判断,减少了再去找I元素引起的Dom操作性能问题,然后我问:那要有很多歌I元素呢,他说你可以通过if($(target).prop("nodeName") == "I"&&$(target).hasClass("特有类"))等等这样特有的属性来判断。最后,我问了一句为啥用prop而不用attr,他说,你自己去百度。然后我就去百度了。区别:

  1.DOM 对象属性(property)及 HTML 标签属性(attribute),prop操作property,attr操作attribute。DOM对象属性通过元素.property来取得,和设置。HTML标签属性,通过setAttribute和getAttribute来设置。
  2. HTML元素的内置build-in属性,attribute和property共享数据,attribute更改了会对property造成影响,反之亦然,但是两者的自定义属性是独立的数据,即使name一样,也互不影响,但是IE6、7没有作区分,依然共享自定义属性数据。
  3.并不是所有的attribute与对应的property名字都一致,比如刚才使用的attribute 的class属性,使用property操作的时候应该是这样className。t.className='active2';
  4.类似于input的checked属性等,attribute取得值是HTML文档字面量值,property是取得计算结果(true or false),property改变并不影响attribute字面量,但attribute改变会影响property计算。
    var t=document.getElementsByTagName('input');
     console.log(t.getAttribute('checked'));  //null
     console.log(t.checked);        //false;
     t.setAttribute('checked','checked');
      console.log(t.getAttribute('checked'));    //checked
      console.log(t.checked);      //true
      t.checked=false;
     console.log(t.getAttribute('checked'));    //checked
     console.log(t.checked);          //false
  5. 对于一些和路径相关的属性,两者取得值也不尽相同,但是同样attribute取得是字面量,property取得是计算后的完整路径
    var t=document.getElementsByTagName('a');
console.log(t.getAttribute('href'));//#
console.log(t.href);//file:///C:/Users/bsun/Desktop/ss/anonymous.html#
  在jQuery1.6之前,.attr()方法在获取一些attributes的时候使用了property值,这样会导致一些不一致的行为。在jQuery1.6中,.prop()方法提供了明确的获取property值的方式,这样.attr()方法仅返回attributes。
  selectedIndextagNamenodeNamenodeTypeownerDocumentdefaultChecked, 和defaultSelected应该使用.prop()方法获取/设置值,因为这几个并没有相应的attibute,只有property。
(这就解释了我老大为什么要用prop("nodeName")=="I",来处理了)。
  checkbox的checked属性property是一个布尔值,这就意味着只要checked属性在HTML中表现出来了,那么相应的property就应该是true,即使checked没有值,这点儿对其它布尔类型的属性一样适用。
  var elem = $('<input type="checkbox" checked=null(空字符"") /> ');
  console.log(elem[0].checked); //true(true)   var elem = $('<input type="checkbox" checked=false/> ');
  console.log(elem[0].checked); //true
  
还有一点:checked attribute并不随着checkedbox的状态而改变,但是checked property却跟着变。因此浏览器兼容的判断checkebox是否被选中应该使用property:if ( elem.checked ),if ( $( elem ).prop( "checked" ) ),if ( $( elem ).is( ":checked" ) ),这对其它一些类似于selected、value这样的动态attribute也适用。


二.由于IE8一下浏览器,不支持原生的console,但是有时为了开发测试,会在js文件添加console打印日志,但是上线时,为了在低版本浏览器下不出问题,可以使用
if(!window.console){
  window.console = {
    log:function(){},
    time:function(){},
    timeEnd:function(){}
  };
}

加油!

 
 

工作中遇到的两个问题-正则以及console的更多相关文章

  1. css布局 - 工作中常见的两栏布局案例及分析

    突然想到要整理这么一篇平时工作中相当常见但是我们又很忽视的布局的多种处理方法.临时就在我经常浏览的网站上抓的相对应的截图.(以后看到其他类型的我再补充) 既然截了图,咱们就直接看人家使用的布局方式,毕 ...

  2. 工作的思考十七:工作中容易犯的错误 - Delay

    其实IT是一个很严谨的行业,不管是从代码角度还是从日常的工作分配都是按计划来的. 从今年年初到现在,在我的工作中出现了两次“Delay”,第一次不以为然,虽然上司也找过我谈话,但没意识到问题的严重性. ...

  3. 【python正则】工作中常用的python正则代码

    工作中常用的一些正则代码: 01.用户名正则 import re # 4到16位(字母,数字,下划线,减号)if re.match(r'^[a-zA-Z0-9_-]{4,16}$', "ab ...

  4. linq介绍及工作中应用两例——左联与内联,linq循环方法

    目录 1 linq介绍 1.1 linq产生背景 1.2 linq使用范围 1.3 linq核心程序集 1.4 linq架构图 1.5 linq使用形式对比 1.5.1 linq To Objects ...

  5. 工作中那些提高你效率的神器(第一篇)_Everything

    引言 无论是工作还是科研,我们都希望工作既快又好,然而大多数时候却迷失在繁杂的重复劳动中,久久无法摆脱繁杂的事情. 你是不是曾有这样一种想法:如果我有哆啦A梦的口袋,只要拿出神奇道具就可解当下棘手的问 ...

  6. 运维工作中sed常规操作命令梳理

    sed是一个流编辑器(stream editor),一个非交互式的行编辑器.它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间",接着用sed命令处理缓冲 ...

  7. 教你如何在工作中“偷懒”,python优雅的帮你解决

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取htt ...

  8. [工作中的设计模式]解释器模式模式Interpreter

    一.模式解析 解释器模式是类的行为模式.给定一个语言之后,解释器模式可以定义出其文法的一种表示,并同时提供一个解释器.客户端可以使用这个解释器来解释这个语言中的句子. 以上是解释器模式的类图,事实上我 ...

  9. [工作中的设计模式]享元模式模式FlyWeight

    一.模式解析 Flyweight在拳击比赛中指最轻量级,即“蝇量级”或“雨量级”,这里选择使用“享元模式”的意译,是因为这样更能反映模式的用意.享元模式是对象的结构模式.享元模式以共享的方式高效地支持 ...

随机推荐

  1. gain 基尼系数

    转至:http://blog.csdn.net/bitcarmanlee/article/details/51488204 在信息论与概率统计学中,熵(entropy)是一个很重要的概念.在机器学习与 ...

  2. java日期公共类

    package com.mall.common; import java.text.ParseException; import java.text.SimpleDateFormat; import ...

  3. Linux-CentOS 更新Firefox版本

    1.用你本地的旧版 firefox,访问http://www.firefox.com.cn,下载Linux版本的Firefox. 2.进入存放下载文件(Firefox-latest-x86_64.ta ...

  4. Redis 授权操作

    [Redis 授权操作] AUTH password 通过设置配置文件中 requirepass 项的值(使用命令 CONFIG SET requirepass password ),可以使用密码来保 ...

  5. 【HDU5992】Finding Hotels 【KD树】

    题意 给出n个酒店的坐标和价格,然后m个查询,每个查询给出一个人的坐标和能承受的最大价格,然后找出在他价格承受范围以内,距离他最近的宾馆,如果有多个,那么输出第一个 分析 kd树的模板题 #inclu ...

  6. fbx模型动画提取教程附带一个用代码提取的方法

    角色已经人形化(Humanoid)了,那它的动画可以用在其它的模型上了也就是可以共用一套模型动画了但是你有没有发现那动画是和fbx模型绑在一起的,没关系你可以选中这几个动画文件按Contrl+D就可以 ...

  7. 图是否是树 · Graph Valid Tree

    [抄题]: 给出 n 个节点,标号分别从 0 到 n - 1 并且给出一个 无向边的列表 (给出每条边的两个顶点), 写一个函数去判断这张`无向`图是否是一棵树. 给出n = 5 并且 edges = ...

  8. cmake 强制链接静态库

    add_executable(main main.cpp) target_link_libraries(main ${CMAKE_SOURCE_DIR}/libbingitup.a) 静态库和动态库共 ...

  9. string.match(RegExp) 与 RegExp.exec(string) 深入详解

    string.match(RegExp) 与 RegExp.exec(string) 相同点与不同点对比解析: 1. 这两个方法,如果匹配成功,返回一个数组,匹配失败,返回null. 2. 当RegE ...

  10. jave 逻辑运算 vs 位运算 + Python 逻辑运算 vs 位运算

    JAVA中&&和&.||和|(短路与和逻辑与.短路或和逻辑或)的区别 博客分类: 面试题目 Java.netBlog  转自 :http://blog.csdn.net/web ...