ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScriptの実践方法まとめ
はじめに: この章では、このポインター、スコープ、プロトタイプなどの js の基礎となる原則の一部については詳しく説明しません。これには、コードを簡素化し、日常の開発中の実行効率を向上させるのに役立ついくつかのことが含まれます。または、経験的な方法として使用することもできます。長さもそれほど長くないので、記事全体を少しずつ読んでプログラミングの楽しさを体験できます。
2 つの間隔内の乱数を取得します
function getRandomNum(Min, Max){ // 获取两个区间之内随机数 // @逆火狂飙 提出有可能第一个参数大于第二个参数,所以增加一下判断更可靠 if (Min > Max) Max = [Min, Min = Max][0]; // 快速交换两个变量值 var Range = Max - Min + 1; var Rand = Math.random(); return Min + Math.floor(Rand * Range); };
ランダムに正/負のパラメータを返します
function getRandomXY(num){ // 随机返回一个 正/负参数 num = new Number(num); if (Math.random() <= 0.5) num = -num; return num; }
setInterval() または setTimeOut() パラメーターを渡すタイマー関数
var s = '我是参数'; function fn(args) { console.log(args); } var a = setInterval(fn(s),100); // xxxxxx错误xxxxx var b = setInterval(function(){ // 正确,用匿名函数调用被计时函数 fn(s); }, 100)
setInterval () またはsetTimeOut() タイマーは再帰的に呼び出します
var s = true; function fn2(a, b){ // 步骤三 if (s) { clearInterval(a); clearInterval(b); } }; function fn(a){ // 步骤二 var b = setInterval(function(){ fn2(a, b) // 传入两个计时器 }, 200) }; var a = setInterval(function(){ // 步骤一 fn(a); // b代表计时器本身,可座位参数传递 }, 100)
文字列を数値に変換
// 无需 new Number(String) 也无需 Number(String) 只需字符串减去零即可 var str = '100'; // str: String var num = str - 0;// num: Number
null値判定
var s = ''; // 空字符串 if(!s) // 空字符串默认转换为布尔false,可以直接写在判断语句里面 if(s != null) // 但是空字符串 != null if(s != undefined) // 空字符串也 != undefine
IEブラウザparseInt()メソッド
// 下面的转换在IE下为0,其他浏览器则为1,这跟IE浏览器解释数字的进制有关 var iNum = parseInt(01); // 所以,兼容的写法为 var num = parseInt(new Number(01))
Firebug は JS コードのデバッグに便利です
//Firebug内置一个console对象,提供内置方法,用来显示信息 /** * console.log(),可以用来取代alert()或document.write(),支持占位符输出,字符(%s)、整数(%d或%i)、浮点数(%f)和对象(%o)。如:console.log("%d年%d月%d日",2011,3,26) * 如果信息太多,可以分组显示,用到的方法是console.group()和console.groupEnd() * console.dir()可以显示一个对象所有的属性和方法 * console.dirxml()用来显示网页的某个节点(node)所包含的html/xml代码 * console.assert()断言,用来判断一个表达式或变量是否为真 * console.trace()用来追踪函数的调用轨迹 * console.time()和console.timeEnd(),用来显示代码的运行时间 * 性能分析(Profiler)就是分析程序各个部分的运行时间,找出瓶颈所在,使用的方法是: console.profile()....fn....console.profileEnd() */現在時刻をミリ秒単位で素早く取得します
// t == 当前系统毫秒值,原因:+号运算符会,会调用Date的valueOf()方法。 var t = +new Date();
小数点以下の桁をすばやく取得します
// x == 2,以下x值都为2,负数也可转换 var x = 2.00023 | 0; // x = '2.00023' | 0
2 つの変数の値を交換します (中間量なし)
var a = 1;var b = 2;a = [b, b=a][0]alert(a+'_'+b) // 结果 2_1,a和b的值已经互换。
論理 OR '||' 演算子
// b不为null:a=b, b为null:a=1。 var a = b || 1; // 较常见的用法为为一个插件方法传参,和获取事件目标元素:event = event || window.event // IE有window.event对象,而FF没有
メソッド オブジェクトのみがプロトタイプ プロトタイプ属性を持ちます
// 方法有对象原型prototype属性,而原始数据没有该属性,如 var a = 1, a没有prototype属性 function Person() {} // 人的构造函数 Person.prototype.run = function() { alert('run...'); } // 原型run方法 Person.run(); // error var p1 = new Person(); // 只有在new操作符时,此时才会把原型run方法赋值给p1 p1.run(); // run..
曜日をすぐに取得
// 计算系统当前时间是星期几 var week = "今天是:星期" + "日一二三四五六".charat(new date().getDay())
閉鎖バイアス
/** * 闭包:任何一个js方法体都可以称为一个闭包,并非什么只有内嵌函数来引用了外部函数的某个参数或属性才会发生。 * 它有一个独立作用域,在该作用域内可存在若干的子作用域(就是方法嵌套方法),最终该闭包作用域为最外层方法的作用域 * 它包含了本身方法参数和所有内嵌函数的方法参数,所以当一个内嵌函数在外部有引用时,该引用的作用域为引用函数所在的(顶级)方法作用域 */ function a(x) { function b(){ alert(x); // 引用外部函数参数 } return b; } var run = a('run...'); // 由于作用域的扩大,可以引用到外部函数a的变量并显示run(); // alert(): run..
アドレスパラメータ文字列を取得し、定期的に更新します
// 获取问号?后面的内容,包括问号 var x = window.location.search // 获取警号#后面的内容,包括#号 var y = window.location.hash // 配合定时器可实现网页自动刷新 window.location.reload()
Null および未定義
/** * Undefined类型只有一个值,即undefined。当声明的变量还未被初始化时,变量的默认值为undefined。 * Null类型也只有一个值,即null。null用来表示尚未存在的对象,常用来表示函数企图返回一个不存在的对象。 * ECMAScript认为undefined是从null派生出来的,所以把它们定义为相等的。 * 但是,如果在一些情况下,我们一定要区分这两个值,那应该怎么办呢?可以使用下面的两种方法 * 在进行判断时根据需要,判断对象是否有值时最好用‘==='强类型判断。 */ var a; alert(a === null); // false,因为a不是一个空对象 alert(a === undefined); // true,因为a未初始化,值为undefined // 引申 alert(null == undefined); // true,因为‘=='运算符会进行类型转换, // 同理 alert(1 == '1'); // true alert(0 == false); // true,false转换为Number类型为0
メソッドにパラメータを動的に追加します
// 方法a多了一个参数2 function a(x){ var arg = Array.prototype.push.call(arguments,2); alert(arguments[0]+'__'+arguments[1]);
関数、オブジェクトは配列ですか?
var anObject = {}; //一个对象 anObject.aProperty = “Property of object”; //对象的一个属性 anObject.aMethod = function(){alert(“Method of object”)}; //对象的一个方法 //主要看下面: alert(anObject[“aProperty”]); //可以将对象当数组以属性名作为下标来访问属性 anObject[“aMethod”](); //可以将对象当数组以方法名作为下标来调用方法 for( var s in anObject) //遍历对象的所有属性和方法进行迭代化处理 alert(s + ” is a ” + typeof(anObject[s])); // 同样对于function类型的对象也是一样: var aFunction = function() {}; //一个函数 aFunction.aProperty = “Property of function”; //函数的一个属性 aFunction.aMethod = function(){alert(“Method of function”)}; //函数的一个方法 //主要看下面: alert(aFunction[“aProperty”]); //可以将函数当数组以属性名作为下标来访问属性 aFunction[“aMethod”](); //可以将函数当数组以方法名作为下标来调用方法 for( var s in aFunction) //遍历函数的所有属性和方法进行迭代化处理 alert(s + ” is a ” + typeof(aFunction[s]));
/** * 是的,对象和函数可以象数组一样,用属性名或方法名作为下标来访问并处理。 * 那么,它到底应该算是数组呢,还是算对象?我们知道,数组应该算是线性数据结构,线性数据结构一般有一定的规律,适合进行统一的批量迭代操作等,有点像波。 * 而对象是离散数据结构,适合描述分散的和个性化的东西,有点像粒子。 * 因此,我们也可以这样问:JavaScript 里的对象到底是波还是粒子?如果存在对象量子论,那么答案一定是:波粒二象性! * 因此,JavaScript里的函数和对象既有对象的特征也有数组的特征。这里的数组被称为“字典”,一种可以任意伸缩的名称值对儿的集合。其实, object和function的内部实现就是一个字典结构,但这种字典结构却通过严谨而精巧的语法表现出了丰富的外观。正如量子力学在一些地方用粒子来 解释和处理问题,而在另一些地方却用波来解释和处理问题。你也可以在需要的时候,自由选择用对象还是数组来解释和处理问题。只要善于把握 JavaScript 的这些奇妙特性,就可以编写出很多简洁而强大的代码来。 */
空白スペースをクリックすると、特定の要素を閉じる/非表示にすることができます
/** * 有时候页面有个下拉菜单或者什么的效果,需要用户点击空白处或者点击其他元素时将其隐藏 * 可用一个全局document点击事件来触发 * @param {Object} "目标对象" */ $(document).click(function(e){ $("目标对象").hide(); }); /** * 但是有一个缺点就是当你点击该元素又想让他显示 * 如果你不及时阻止事件冒泡至全局出发document对象点击时,上面方法就会执行 */ $("目标对象").click(function(event){ event = event || window.event; event.stopPropagation(); // 当点击目标对象时,及时阻止事件冒泡 $("目标对象").toggle(); });
上記は一般的に使用されるものの一部です私がまとめた JavaScript の方法は次のとおりです。その他の関連チュートリアルについては、JavaScript ビデオ チュートリアル をご覧ください。