JavaScript基本语法
本节和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基本语法的更多相关文章
- JavaScript基本语法(一)
		
前段时间学习了HTML和CSS,也实战了一些结构较简单的项目.在还没运用到JS的知识时,做出来的效果总觉得少了些什么.虽然总体布局与一些基本的特效,也能用HTML+CSS就能完成.但如今开始进入Jav ...
 - javascript运算符语法概述
		
× 目录 [1]个数 [2]优先级 [3]结合性[4]类型[5]规则表 前面的话 javascript中的运算符大多由标点符号表示,少数由关键字表示,它们的语法言简意赅,它们的数量却着实不少.运算符始 ...
 - javascript基础语法——表达式
		
× 目录 [1]原始表达式 [2]复杂表达式 前面的话 一般地,关于javascript基础语法,人们听得比较多的术语是操作符和语句.但是,其实还有一个术语经常使用,却很少被提到,这就是javascr ...
 - javascript基础语法——词法结构
		
× 目录 [1]java [2]定义 [3]大小写[4]保留字[5]注释[6]空白[7]分号 前面的话 javascript是一门简单的语言,也是一门复杂的语言.说它简单,是因为学会使用它只需片刻功夫 ...
 - JavaScript的语法规则
		
JavaScript的语法规则 JavaScript区分大小写 JavaScript脚本程序须嵌入在HTML文件中 JavaScript脚本程序中不能包含HTML标记代码 每行写一条脚本语句 语句末尾 ...
 - JavaScript的语法要点 1 - Lexically Scoped Language
		
作为从一开始接触C.C++.C#的程序员而言,JavaScript的语法对我来说有些古怪,通过最近一年的接触,对它有了一定的了解,于是想把它的一些语法要点记录下来. 1. Block Scope vs ...
 - javascript的语法作用域你真的懂了吗
		
原文:javascript的语法作用域你真的懂了吗 有段时间没有更新了,思绪一下子有点转不过来.正应了一句古话“一天不读书,无人看得出:一周不读书,开始会爆粗:一月不读书,智商输给猪.”.再加上周五晚 ...
 - 【repost】JavaScript 基本语法
		
JavaScript 基本语法,JavaScript 引用类型, JavaScript 面向对象程序设计.函数表达式和异步编程 三篇笔记是对<JavaScript 高级程序设计>和 < ...
 - JavaScript 中语法规范及调试
		
JavaScript 中语法规范及调试 版权声明:未经博主授权,内容严禁分享转载 JavaScript 开发环境 JavaScript 脚本可以使用任意一款纯文本编辑器进行编程开发. 常见的前端开发编 ...
 - Unit04: JavaScript 概述 、 JavaScript 基础语法 、 流程控制
		
Unit04: JavaScript 概述 . JavaScript 基础语法 . 流程控制 my.js function f3() { alert("唐胜伟"); } demo1 ...
 
随机推荐
- CodeForces #369 div2 D Directed Roads DFS
			
题目链接:D Directed Roads 题意:给出n个点和n条边,n条边一定都是从1~n点出发的有向边.这个图被认为是有环的,现在问你有多少个边的set,满足对这个set里的所有边恰好反转一次(方 ...
 - Using of grep sed awk on Linux
			
#This script is to parse data file: fun0() { ## [INFO1]a=1 b=2 c=3 [INFO2]a=7 b=8 c=9 [INFO3] a=x ...
 - 解决cocopods不提示第三方库名字的方法
			
在使用第三方类库时,使用cocoaPods是非常方便的,具体使用方法可以参考:CocoaPods安装和使用教程 的安装使用方法.今天讨论的问题是,我在使用的时候遇到了一些问题:用cocoaPod si ...
 - 1900. Brainwashing Device
			
http://acm.timus.ru/problem.aspx?space=1&num=1900 题目大意: 有N个车站,相邻车站之间形成一个段,这样就有N-1个段,每个段最多可以放一个洗脑 ...
 - 用python定时文章发布wordpress
			
用python定时文章发布wordpress: 流程: 采集 - 筛选文章 - wordpress文章发布. wordpress文章发布代码:python利用模块xmlrpclib发布文章非常便捷,省 ...
 - C#面向对象总结1
			
1.面向过程-----> 面向对象 面向过程:面向的是完成这件事的过程,强调的是完成这件事的动作. 面向对象:找个对象帮你做事. 意在写出一个通用的代码,屏蔽差异. 我们在代码中描述一个对象,一 ...
 - 2、Linux系统root用户忘记密码的重置方式
			
.界面按空格暂停,按E .找到UTF-,在后面空格后输入init=/bin/sh 然后CHRL+X启动 .进入到这个界面,输入mount -o remount,rw / .输入passwd..然后输入 ...
 - 探索javascript----有关数组的常用方法
			
与字符串的转换: str.split(","):将一个字符串以为英文逗号分割,返回一个数组: arr.join(","):返回用指定分隔符间隔的含所有数组元素的 ...
 - 两个小的java程序,用于练习java基本语法
			
1.输入两个数,求其加减乘除.用窗口的形式呈现 import javax.swing.JOptionPane; public class JJCC { public static void main( ...
 - Mark一下,一上午就这么过去了,关于客户端连接oracle10G的问题
			
Mark一下,一上午就这么过去了,关于客户端连接oracle10G的问题 正常的客户端PLSQL和Navicat都可以正常连接Oracle(局域网内),但代码生成器和VS2015死活连不上,在网上找了 ...