本节和CSS语法类似,理解这些语法以后,就可以按照Bootstrap的开发规范去开发自己的各种插件了。

||和&&运算符

  • ||表示,如果第一个元素可以转换为true,则返回第一个元素的值,否则查询第二个元素的值。如果多个||一起用,则按顺序优先级判断。
  • &&则相反,如果第一个元素可以转换为false,才返回第一个元素的值,否则返回第二个元素的值,多个&&一起用时,也是按顺序优先级判断。
  • a&&b&&c&&d:返回第一个可转换为false的元素值。
  • a||b||c||d:返回第一个可转换为true的元素值。

  上述运算符的转换规则如下:对象为true、非零数字为true、非空字符串为true、其他为false。

立即调用的函数表达式

  在JS里,function在定义的时候就可以通过在后面加一个小括号的形式立即进行调用。比如:

(function () { /* code */ } ());           // 推荐使用这个
(function () { /* code */ })(); // 这个也是可以用
(function () { /* code */ } (1)); // 传入参数1
(function () { /* code */ })(2); // 传入参数2

  Bootstrap的所有JS插件都使用了这个模式。比如在alert.js文件里有以下代码:

+function ($) {
"use strict";
}(jQuery);

  这个文件的意思是声明一个function,然后立即执行,并且在执行的时候传入jQuery对象作为参数。这么做的好处是,此时function内部的$已经是局部变量了,不会再受外部作用域的影响了。

  function前面的+号和分号的功能是一样的,主要防止定义了不符合规定的代码。比如上面的这段代码若没有+号,则代码连接在一起执行就会出错,这样就消除了出错。参考:http://www.cnblogs.com/TomXu/archive/2011/12/31/2289423.html

原型

  在Bootstrap的JS插件里,所有的插件都是利用了类似下面的代码:

Alert.prototype.close = function (e) {
/*...*/
}

  上面的代码就是在Alert函数上定义了一个名为close的原型方法,参考:http://www.cnblogs.com/TomXu/archive/2012/01/05/2305453.htm

var Calculator = function () {};
Calculator.prototype.add = function (a, b) {
return a + b;
}
var cal = new Calculator();
var sum = cal.add(1, 2);

jQuery基本用法

  jQuery的on和off分别用于绑定和禁用事件。例如:

$('td').on("click",function (event){
alert(1);
}) $('td').off('click');

  但是对于Bootstrap框架,它对jQuery的on和off的使用稍有不同,例如:

$(document).on('click.bs.carousel.data-api','td',function (e){};
$(document).off('.carousel.data-api');

  上述的on在使用时,中间多了一个参数,而且选择器变成了document。它的好处是只在document上绑定一个单击事件,利用冒泡的机制,在单击的时候检查是否是td元素,如果是才处理。而前面我们把td作为选择器的时候,一个页面有多少td元素就会绑定多少个click事件,这样性能会大大降低。

  这种3个参数的模式称为享元模式,详情:http://www.cnblogs.com/TomXu/archive/2012/04/09/2379774.htm

事件命名空间

$('#abc').on("click.tomxu", function (event) {
alert(1);
});

  另外,要注意的是,这里的事件(click)后面跟了一些字符串,我们简单称它们为带有命名空间的事件。一般别人触发click事件,都是这样做的$('#abc').trigger('click')。执行该代码时,所有绑定的click事件回调都会被执行。但是如果触发的时候,你不想影响其他click触发代码,这时候就可以只触发自己定义的click事件,以求不会对别人绑定的click回调产生影响,这时可以加上命名空间。

$.data()

  很多js插件里都使用了$(selector).data()方法,它的意思是收集指定元素上的所有以data-开头的自定义属性,并合并成一个对象字面变量。比如:

<div id="abc" data-role="aaa" data-toggle="toggle" data-xxx="tom"></div>

  如果要获取data-role里的aaa这个知,则需要调用如下代码:

$("'#abc").data("role");

  如果是不带参数的$("#abc").data()。则表示一次性将所有以data-开头的参数都收集起来,其结果和用如下方式声明一个value变量是一样的。

var value = {
role: 'aaa',
toggle: 'toggle',
xxx: 'tom'
};

JavaScript基本语法的更多相关文章

  1. JavaScript基本语法(一)

    前段时间学习了HTML和CSS,也实战了一些结构较简单的项目.在还没运用到JS的知识时,做出来的效果总觉得少了些什么.虽然总体布局与一些基本的特效,也能用HTML+CSS就能完成.但如今开始进入Jav ...

  2. javascript运算符语法概述

    × 目录 [1]个数 [2]优先级 [3]结合性[4]类型[5]规则表 前面的话 javascript中的运算符大多由标点符号表示,少数由关键字表示,它们的语法言简意赅,它们的数量却着实不少.运算符始 ...

  3. javascript基础语法——表达式

    × 目录 [1]原始表达式 [2]复杂表达式 前面的话 一般地,关于javascript基础语法,人们听得比较多的术语是操作符和语句.但是,其实还有一个术语经常使用,却很少被提到,这就是javascr ...

  4. javascript基础语法——词法结构

    × 目录 [1]java [2]定义 [3]大小写[4]保留字[5]注释[6]空白[7]分号 前面的话 javascript是一门简单的语言,也是一门复杂的语言.说它简单,是因为学会使用它只需片刻功夫 ...

  5. JavaScript的语法规则

    JavaScript的语法规则 JavaScript区分大小写 JavaScript脚本程序须嵌入在HTML文件中 JavaScript脚本程序中不能包含HTML标记代码 每行写一条脚本语句 语句末尾 ...

  6. JavaScript的语法要点 1 - Lexically Scoped Language

    作为从一开始接触C.C++.C#的程序员而言,JavaScript的语法对我来说有些古怪,通过最近一年的接触,对它有了一定的了解,于是想把它的一些语法要点记录下来. 1. Block Scope vs ...

  7. javascript的语法作用域你真的懂了吗

    原文:javascript的语法作用域你真的懂了吗 有段时间没有更新了,思绪一下子有点转不过来.正应了一句古话“一天不读书,无人看得出:一周不读书,开始会爆粗:一月不读书,智商输给猪.”.再加上周五晚 ...

  8. 【repost】JavaScript 基本语法

    JavaScript 基本语法,JavaScript 引用类型, JavaScript 面向对象程序设计.函数表达式和异步编程 三篇笔记是对<JavaScript 高级程序设计>和 < ...

  9. JavaScript 中语法规范及调试

    JavaScript 中语法规范及调试 版权声明:未经博主授权,内容严禁分享转载 JavaScript 开发环境 JavaScript 脚本可以使用任意一款纯文本编辑器进行编程开发. 常见的前端开发编 ...

  10. Unit04: JavaScript 概述 、 JavaScript 基础语法 、 流程控制

    Unit04: JavaScript 概述 . JavaScript 基础语法 . 流程控制 my.js function f3() { alert("唐胜伟"); } demo1 ...

随机推荐

  1. 读javascript高级程序设计15-Ajax,CORS,JSONP,Img Ping

    平时用惯了jQuery.ajax之类的方法,却时常忽略了它背后的实现,本文是学习了AJAX基础及几种跨域解决方案之后的一些收获. 一.AJAX——XMLHttpRequest 谈起Ajax我们都很熟悉 ...

  2. c#中对json数据的序列化和反序列化(笔记)

    今天遇到在后台中要获取json格式数据里的某些值,网上查了些资料: string jsonstr = _vCustomerService.LoadCustomerbyNumTotalData(quer ...

  3. MVC模式与三层架构的区别

    之前总是混淆MVC表现模式和三层架构模式,为此记录下. 三层架构和MVC是有明显区别的,MVC应该是展现模式(三个加起来以后才是三层架构中的UI层) 三层架构(3-tier application) ...

  4. codeforces 451E Devu and Flowers

    题意:有n个瓶子每个瓶子有 f[i] 支相同的颜色的花(不同瓶子颜色不同,相同瓶子花视为相同) 问要取出s支花有多少种不同方案. 思路: 如果每个瓶子的花有无穷多.那么这个问题可以转化为  s支花分到 ...

  5. GIT(分布式版本控制系统)

    Git是一款免费.开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目.[1] Git的读音为/gɪt/. Git是一个开源的分布式版本控制系统,用以有效.高速的处理从很小到非常大的项目版本 ...

  6. enmo_day_07

    数据备份 物理备份 : 底层数据块 逻辑备份 :exp(export), imp(import) 导入导出工具,提取成dump文件,再将dump文件放入数据库 expdp, impdp 数据蹦 uti ...

  7. 排序小结(C版)

    一.快速排序(C源码) #include <stdlib.h> #include <stdio.h> int adjust(int a[],int start,int end) ...

  8. 集合ArrayList

    /*集合ArrayList * 例如: * 1.创建:ArrayList<Egg> myList = new ArrayList<Egg>(); *      Egg类型的集合 ...

  9. Day3 summary

    今天主要学习了K-means算法,又过了遍Andrew教授的coursera视频,弄明白了Action书上的算法.困难出现在实例练习,申请Yahoo place finder API获得了appid, ...

  10. SQLServer数据库表架构和数据保存成sql文件

    一.先在你的mssql数据库中点击“数据库–>任务–>生成脚本” 二.然后我们会看到有“生成和发布脚本”窗口 下一步 三.选择要编写脚本的数据库对象,全部导出选第一个,如果你想导出部分数据 ...