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 ...
随机推荐
- Windows Store App 变形特效
在应用程序的开发过程中,为了让界面按照期望的效果显示,有时会对界面元素应用变形特效,例如图片的缩放.旋转.移动等.与3D特效不同,在界面元素实现变形特效之后,其平行关系不会发生改变,只不过是位置.大小 ...
- DeepLearning之路(三)MLP
DeepLearning tutorial(3)MLP多层感知机原理简介+代码详解 @author:wepon @blog:http://blog.csdn.net/u012162613/articl ...
- Java 获取网络重定向文件的真实URL
其实Java 使用HttpURLConnection下载的的时候,会自动下载重定向后的文件,但是我们无法获知目标文件的真实文件名,文件类型,用下面的方法可以得到真实的URL,下面是一个YOUKU视频的 ...
- android 定时器AlarmManager
1.android中通常是使用AlarmManager来定时启动一个单次或重复多次操作的.具体的说就是我们通过AlarmManager设定一个时间和注册一个intent到系统中,然后在该时间到来时,系 ...
- CSS实现垂直水平居中
HTML结构: <div class="wrapper"> <div class="content"></div> < ...
- Using Interface Builder记录
1.interface builder的作用主要是用来设计视图,文件的拓展名诶.storyboard或者.xib :这两文件的区别是,.xib文件只能设计一个视图控制器,也就只能显示一个视图,.sto ...
- HDU 4352 XHXJ's LIS
奇妙的题. 你先得会另外一个nlogn的LIS算法.(我一直只会BIT.....) 然后维护下每个数码作为结尾出现过没有就完了. #include<iostream> #include&l ...
- 三部曲一(搜索、数学)-1016-Code
Code Time Limit : 2000/1000ms (Java/Other) Memory Limit : 60000/30000K (Java/Other) Total Submissi ...
- HDU5128 细心、细心、细心
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5128 题意:给你n(n < 30)个点的坐标,然后让你求出这n个点能构成的两个最大矩形的面积,有 ...
- iOS真机UI调试利器——Reveal
做iOS的开发,UI是非常非常重要的一环.调试时我们一般用模拟器,提交前用真机做测试.用模拟器来调试UI效果虽然快捷方便,但有时仍然希望有更强大 的工具来帮助分析UI,尤其是专注在UI的效果调试时.最 ...