总结: 主要是前端 JS 的基础 (╯‵□′)╯︵┻━┻不许吐槽我把总结写在前面
javascript
特别感谢超级好用的MarkDown编辑器
(づ ̄ 3 ̄)づ
StackEditcss
(。・・)ノ
JS的函数定义时有3个参数, 使用时传入5个实参, 则前3个实参由定义的3个参数得到, 剩下的参数能够经过arguments
获取, arguments
是一个伪数组, 在这个例子里, 共有5个元素.html
==
!=
===
!==
的区别: 关于JS的 undefined null 还有 === 和 ==前端
<script>
标签内的JS代码用<!-- -->
wrap起来, 是由于有的浏览器若是没有这个会没法识别js代码(固然如今大部分浏览器都是没问题的)java
使用+
来链接多行字符串jquery
跟css相反, 不要使用省略的小数写法web
不要省略花括号segmentfault
不要用with
语句数组
不要使用for-in
语句来遍历数组浏览器
不推荐使用==
和!=
, 推荐使用===
和!==
// case 1: // 对象的定义: var book = { title: "markdown", author: "me" };
// case 2: // 数组的定义: var color = [ "red", "green" ] ;
// case 3: // 注释的推荐格式 // 1. 相似这样的单行注释, 用来讲明一行代码的功能, 前面加一个空格, 缩进跟代码一致 console.log("我是代码"); /* * 2. 使用这样的格式来做为 * 多行注释 */ console.log(true); // 3. 像这样的提醒类注释跟代码之间隔一个空格 /** 4. 若是要生成文档, 就使用这样的注释 @method 函数的动做 @param {Object} 说明 @return {Object} 说明 **/
// case 4: // 若是要使用for-in循环, 最好先使用hasOwnProperty()方法 var p; for (p in object) { if (object.hasOwnProperty(p)) { console.log("p name is " + p); console.log("p value is " + object[p]); } }
// case 5: // js和css分离, 这个函数支持全部浏览器中给元素添加方法 function addListener(target, type, handler) { if (target.addEventListener) { target.addEventListener(type, handler, false); } else if (target.attachEvent) { target.attachEvent("on" + type, handler); } else { target["on" + type] = handler; } } // 这个函数作*, 加在onclick上 function doSomething() { // do something } var btn = document.getElementById("action-btn"); addListener(btn, "click", doSomething);
不要直接在html里面引用js
尽可能不要使用全局变量
当心不要建立意外的全局变量
主要是为了可扩展性
var MyApplication = { // 这个方法专门处理鼠标点击 handleClick: function(event) { this.showPopup(event); }, // 而后这个方法专门处理鼠标点击产生的动做 showPopup: function(event) { var popup = document.getElementById("popup"); popup.style.left = event.clickX + "px"; popup.style.top = event.clickY + "px"; popup.className = "reveal"; } }; // 将popup加到鼠标点击动做里去的实际应用 addListener (element, "click", function(event) { MyApplication.handleClick(event); });
instanceof
, 而不要使用!==
和===
// 这个函数的做用是判断value是否是数组 function isArray(value) { if (typeof Array.isArray === "function") { return Array.isArray(value); } else { return Object.prototype.toString.call(value) === "[object Array]"; } } // 使用函数判断x是否是数组 isArray(x); // 通常来讲, 还能够这样判断 Array.isArray(x) === "[object Array]"
// 对象的定义, 下面咱们要检测这个对象的属性 var object = { count: 0; related: null; }; // 检测对象的count属性 if ("count" in object) { // code here } // 或者能够这样 if (object.hasOwnProperty("related")) { // code } // 或者更详细一点 if ("hasOwnProperty" in Object && object.hasOwnProperty("related")) { // code }
把配置数据单独放在一个对象的属性值中
把配置数据放在Java属性文件中
读取的时候: 使用JSON/JSONP/js
// 常见的抛出错误方法 throw new Error("error description"); // 定义本身的错误类型 function MyError(message) { this.message = message; } MyError.prototype = new Error();
Object.preventExtension(object);
Object.seal(object);
Object.freeze(person);
首先使用特性检测判断某个属性是否存在
不行再使用用户代理检测检测用户代理字符串
// case 1: // 这个函数, 达到了跟c语言的sprintf同样的效果 function sprintf(text) { // text能够获取传入sprintf里面的第一个参数, args获取包括text在内的全部参数 var i=1, args=arguments; /* * 在这里, 将替换text中的全部replace * 匿名函数将被调用2次, 第一次返回args[1], 第二次返回args[2] * args[0] 等于 text */ return text.replace(/%s/g, function() { return (i < args.length) ? args[i++] : ""; }); } // 使用sprintf函数 var result = sprintf("<li><a href=\"%s\">%s</a></li>", "/item/4", "Fourth item"); // 打印出替换的结果 console.log(result);
./js/hello.js
define(function(){ var moving = function() { $("#btn").addClass("btn-move-class"); }; return { moving: moving } });
./hello.html
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no"> <meta content="telephone=no" name="format-detection"> <script type="text/javascript" src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script> <script type="text/javascript" src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.js"></script> <script type="text/javascript" src="http://apps.bdimg.com/libs/backbone.js/1.1.2/backbone-min.js"></script> <script type="text/javascript" src="http://apps.bdimg.com/libs/backbone.js/1.1.2/backbone.js"></script> <script type="text/javascript" src="http://apps.bdimg.com/libs/require.js/2.1.9/require.js"></script> <script type="text/javascript" src="http://apps.bdimg.com/libs/require.js/2.1.9/require.min.js"></script> <link href="css/hello.css" rel="stylesheet" type="text/css" /> </head> <body> <div id="btn">Click</div> </body> <script type="text/javascript"> <!-- require(['js/hello'],function(hello){ hello.moving(); }); //--> </script> </html>
./css/hello.css
@charset "utf-8"; .container {font-family:"Microsoft YaHei","Hiragino Sans GB",Arial,"Lucida Grande",Verdana;} div { height: 60px; width: 90%; margin: auto; font-size: 50px; color: #fff; font-weight: bolder; text-align: center; border-radius: 9999px; background: #338559; } .btn-move-class { -webkit-animation:moving 5s linear infinite; animation:moving 5s linear infinite; } @keyframes moving{ 0%,100% {height:60px;} 50% {height:200px;} } @-moz-keyframes moving /* Firefox */{ 0%,100% {height:0px;} 50% {height:200px;} } @-webkit-keyframes moving /* Safari 和 Chrome */{ 0%,100% {height:0px;} 50% {height:200px;} } @-o-keyframes moving /* Opera */{ 0%,100% {height:0px;} 50% {height:200px;} }