关于jQuery的那些事

JQuery的优缺点是什么

  1. jQuery实现脚本与页面的分离
    在HTML代码中,我们还经常看到类似这样的代码:
    即使validate()函数可以被放置在一个外部文件中,实际上我们依然是把页面与逻辑和事件混杂在一起。jQuery让你可以将这两部分分离。借助于jQuery,页面代码将如下所示:
    接下来,一个单独的JS文件将包含以下事件提交代码:
    $(“myform”).submit(function(){
    …your code here
    )}
    这样我们可以实现灵活性非常强的清晰页面代码。jQuery让JavaScript代码从HTML页面代码中分离出来,就像数年前CSS让样式代码与页面代码分离开一样。
  2. 最少的代码做最多的事情
    最少的代码做最多的事情,这是jQuery的口号,而且名副其实。使用它的高级selector,开发者只需编写几行代码就能实现令人惊奇的效果。开发者无需过于担忧浏览器差异,它除了还完全支持Ajax,而且拥有许多提高开发者编程效率的其它抽象概念。jQuery把JavaScript带到了一个更高的层次。以下是一个非常简单的示例:
    代码如下:
    $(“p.neat”).addClass(“ohmy”).show(“slow”);
    通过以上简短的代码,开发者可以遍历“neat”类中所有的元素,然后向其增加“ohmy”类,同时以动画效果缓缓显示每一个段落。开发者无需检查客户端浏览器类型,无需编写循环代码,无需编写复杂的动画函数,仅仅通过一行代码就能实现上述效果。
  3. 性能
    在大型JavaScript框架中,jQuery对性能的理解最好。尽管不同版本拥有众多新功能,其最精简版本只有18KB大小,这个数字已经很难再减少。jQuery的每一个版本都有重大性能提高。本篇文章讲的是jQuery未经过任何优化的原始速度。如果将其与新一代具有更快 JavaScript引擎的浏览器(如火狐3和谷歌Chrome)配合使用,开发者在创建富体验Web应用时将拥有全新速度优势。
  4. 它是一个“标准”
    之所以使用引号,是以为jQuery并非一个官方标准。但是业内对jQuery的支持已经非常广泛。谷歌不但自己使用它,还提供给用户使用。另外戴尔、新闻聚合网站Digg、WordPress、Mozilla和许多其它厂商也在使用它。微软甚至将它整合到Visual Studio中。如此多的重量级厂商支持该框架,用户大可以对其未来放心,大胆的对其投入时间。
  5. 插件
    基于jQuery开发的插件目前已经有大约数千个。开发者可使用插件来进行表单确认、图表种类、字段提示、动画、进度条等任务。jQuery社区已经成长为一个生态系统。这一点进一步证明了上一条理由,它是一个安全的选择。而且,jQuery正在主动与“竞争对手”合作,例如Prototype。它们似乎在推进JavaScript的整体发展,而不仅仅是在图谋一己之私。
  6. 节省开发者学习时间
    当然要想真正学习jQuery,开发者还是需要投入一点时间,尤其是如果你要编写大量代码或自主插件的话,更是如此。但是,开发者可以采取“各个击破”的方式,而且jQuery提供了大量示例代码,入门是一件非常容易的事情。我建议开发者在自己编写某类代码前,首先看一下是否有类似插件,然后看一下实际的插件代码,了解一下其工作原理。简而言之,学习jQuery不需要开发者投入太多,就能够迅速开始开发工作,然后逐渐提高技巧。
  7. 让JavaScript编程变得有趣
    我发现使用jQuery是一件充满乐趣的事情。它简洁而强大,开发者能够迅速得到自己想要的结果。它解决了许多JavaScript问题和难题。我过去曾讨厌JavaScript编程,但现在却非常喜欢它。通过一些基础性的改进,开发者可以真正去思考开发下一代Web应用,不再因为语言或工具的差劲而烦恼。我相信它的“最少的代码做最多的事情”口号。

jQuery的不足之处

  1. 不能向后兼容。每一个新版本不能兼容早期的版本。举例来说,有些新版本不再支持某些selector,新版jQuery却没有保留对它们的支持,而只是简单的将其移除。这可能会影响到开发者已经编写好的代码或插件。
  2. 插件兼容性。与上一点类似,当新版jQuery推出后,如果开发者想升级的话,要看插件作者是否支持。通常情况下,在最新版jQuery版本下,现有插件可能无法正常使用。开发者使用的插件越多,这种情况发生的几率也越高
  3. 在同一页面上使用多个插件时,很容易碰到冲突现象,尤其是这些插件依赖相同事件或selector时最为明显。这虽然不是jQuery自身的问题,但却又确实是一个难于调试和解决的问题。
  4. jQuery的稳定性。它没有让我的浏览器崩溃,我这儿指的是其版本发布策略。jQuery 1.3版发布后仅过数天,就发布了一个漏洞修正版1.3.1。他们还移除了对某些功能的支持,可能会影响许多代码的正常运行。
  5. 在大型框架中,jQuery核心代码库对动画和特效的支持相对较差。但是实际上这不是一个问题。目前在这方面有一个单独的jQuery UI项目和众多插件来弥补此点。
    如果你还在犹豫是否要学习一个JavaScript框架,并困惑于选择哪一个框架,那么我推荐你选择jQuery。这并非说其它框架不好,只是jQuery可能是最稳妥和最具回报性的选择。

jQuery 库中的 $() 是什么

( ) j Q u e r y ( ) 使 j Q u e r y () 函数用于将任何对象包裹成 jQuery 对象,接着你就被允许调用定义在 jQuery 对象上的多个不同方法。你甚至可以将一个选择器字符串传入 $() 函数,它会返回一个包含所有匹配的 DOM 元素数组的 jQuery 对象。

Zepto 库和JQ 区别

Zepto 相对jQuery 更加轻量,主要用在移动端,jQuery 也有对应的jQuerymobile 移动端框架。

jQuery 的slideUp 动画,如果目标元素是被外部事件驱动, 当鼠标快速地连续触发外部元素事件, 动画会滞后的反复执行,该如何处理呢?

  1. JQuery 的源码看过吗?能不能简单概况一下它的实现原理?
    考察学习知识的态度,是否仅仅是停留在使用层面,要知其然知其所以然
  2. jQuery.fn 的init 方法返回的this 指的是什么对象?为什么要返回this?
    this 执行init 构造函数自身,其实就是jQuery 实例对象,返回this 是为了实现jQuery
    的链式操作
  3. query 中如何将数组转化为json 字符串,然后再转化回来?
    $.parseJSON(‘{“name”:”John”}’);
  4. jQuery 的属性拷贝(extend)的实现原理是什么,如何实现深拷贝?
    递归赋值
  5. jquery.extend 与jquery.fn.extend 的区别?
    Jquery.extend 用来扩展jQuery 对象本身;jquery.fn.extend 用来扩展jQuery 实例
  6. 谈一下Jquery 中的bind(),live(),delegate(),on()的区别?
  7. JQuery 一个对象可以同时绑定多个事件,这是如何实现的?
    可以同时绑定多个事件,低层实现原理是使用addEventListner 与attachEvent 兼容处
    理做事件注册
  8. Jquery 与jQuery UI 有啥区别?
    jQuery 是操作dom 的框架,jQueryUI 是基于jQuery 做的一个UI 组件库
  9. jQuery 和Zepto 的区别?各自的使用场景?
    jQuery 主要用于pc 端,当然有对应的jQuerymobile 用于移动端,zepto 比jQuery 更
    加小巧,主要用于移动端
  10. 针对jQuery 的优化方法?
    优先使用ID 选择器
    在class 前使用tag(标签名)
    给选择器一个上下文
    慎用.live()方法(应该说尽量不要使用)
    使用data()方法存储临时变量
  11. Zepto 的点透问题如何解决?
    点透主要是由于两个div 重合,例如:一个div 调用show(),一个div 调用hide();
    这个时候当点击上面的div 的时候就会影响到下面的那个div;
    解决办法主要有2 种:
    1.github 上有一个叫做fastclick 的库,它也能规避移动设备上click 事件的延迟响
    应,https://github.com/ftlabs/fastclick
    将它用script 标签引入页面(该库支持AMD,于是你也可以按照AMD 规范,用诸如
    require.js 的模块加载器引入),并且在dom ready 时初始化在body 上,
    2.根据分析,如果不引入其它类库,也不想自己按照上述fastclcik 的思路再开发一套
    东西,需要1.一个优先于下面的“divClickUnder”捕获的事件;2.并且通过这个事件
    阻止掉默认行为(下面的“divClickUnder”对click 事件的捕获,在ios 的safari,
    click 的捕获被认为和滚屏、点击输入框弹起键盘等一样,是一种浏览器默认行为,即
    可以被event.preventDefault()阻止的行为)。
  12. 知道各种JS 框架(Angular, Backbone, Ember, React, Meteor, Knockout…)
    么? 能讲出他们各自的优点和缺点么?
    知识面的宽度,流行框架要多多熟悉
  13. Underscore 对哪些JS 原生对象进行了扩展以及提供了哪些好用的函数方
    法?
    Underscore 的熟悉程度
  14. 使用过angular 吗?angular 中的过滤器是干什么用的
    在表达式中转换数据

    姓名为{{ lastName | uppercase }}


    currency,是什么过滤器——格式化数字为货币格式,单位是$符。
  15. 移动端最小触控区域是多大?
    移动端的点击事件的有延迟,时间是多久,为什么会有? 怎么解决这个延时?(click 有
    300ms 延迟,为了实现safari 的双击事件的设计,浏览器要知道你是不是要双击操作。)

猜你喜欢

转载自blog.csdn.net/mangxi8200/article/details/81148836