解惑之JavaScript

之前的文章说过讲讲JS,可博主很懒,一直没动笔,今天有空就来水一下吧(本文只针对JS初阶的,偶也很菜,讲不出啥高端货)

现如今JS发展的好快:TIOBE 2015年1月编程语言排行榜JavaScript夺得桂冠2014年讨论最多的编程语言:JavaScript居首位、苹果将其引入OS X 10.10代替私有的AppleScript、还有如雨后春笋般的各种js框架和库的出现或兴起(AngularJS、Node.js。。。)种种迹象表明JS地位越来越高,学好它你的前途会更光明。

不扯了,正文↓

1、&&操作符

this.index == oBtn.length - 1 && (oDiv.style.cssText = "");

这一段像初学者有可能就会疑问了这个是啥意思啊,其实它等于

if((this.index)==oBtn.length-1){
    oDiv.style.cssText="";
}

看到这个大家肯定会恍然大悟,上面的简写就是利用了&&操作符,但阅读起来不太方便,所以看大家自己的喜好了

2、for-in

window.onload = function ()
{
    var oLink = document.getElementsByTagName("link")[0];
    var oSkin = document.getElementById("skin").getElementsByTagName("li");

    for(var i = 0; i< oSkin.length; i++)
    {
        oSkin[i].onclick = function ()
        {
            for(var p in oSkin) oSkin[p].className = "";
            this.className = "current";
            oLink[‘href‘] = this.id + ".css";
        }
    }

};

上面的代码是一个换肤的代码,不难理解,估计会出现疑问的就在for(var p in oSkin) oSkin[p].className = ""这一句了,会搞不懂这个p代表啥,熟读JS高程的会知道for-in语句是一种精准的迭代语句,可以用来枚举对象的属性,那上面就是把oSkin这个对象存在的属性名赋值给变量P,这里的oSkin是一个HTMLCollection[li, li.current, li],HTMLCollection 对象的行为和只读数组一样,所以可以使用 JavaScript 的方括号,通过编号或名称索引一个 HTMLCollection 对象,这就解释了上面。

3、var nameSpace=window.nameSpace||{}

这句话是逻辑或操作符的妙用,意思就是window.nameSpace如果存在就赋值给nameSpace,如果不存在就返回空对象{},其实{}=new function nameSpace(){},利用了逻辑或避免了给变量赋null或undefined值。

4、JS命名空间

JavaScript 中没有显式的命名空间定义,这就意味着所有对象都定义在一个全局共享的命名空间下面,因此过多的全局变量和函数很容易导致命名冲突。怎么解决呢?一种推荐使用匿名包装器(自执行的匿名函数)来创建命名空间,这样不仅可以防止命名冲突, 而且有利于程序的模块化。

(function() {
    // 函数创建一个命名空间

    window.foo = function() {
        // 对外公开的函数,创建了闭包
    };

})(); // 立即执行此匿名函数

在一个由很多开发人员共同参与的大型应用程序中,过多的全局变量和函数很容易导致命名冲突。而通过创建私用作用域,每个开发人员既可以使用自己的变量,又不必担心搞乱全局作用域(在匿名函数中定义任何变量,都会在执行结束时被销毁)。

3和4的组合其实也可以构造出命名空间,通过类似JSON的结构也可以创造出命名空间(虽有点牵强,但作用达到了)

var namespace = {
    //类1
    class1: {

        //字段1
         field1: "<br/><br/>"
        //字段2
        ,field2: 12345

        //方法1
        ,method1: function(para) {
            document.write(‘e.g.1: namespace.class1.method1 para:‘ + para + this.field1);
        }
        //方法2
        ,method2: function(para) {
            //还可以调用本类中的方法write,只要在前面加个this,
              //c#中本类中的方法相互调用可以不写"this",
              //但php中同样需要"this->"
            this.write(‘e.g.1: namespace.class1.method2 para:‘ + para);
        }
        //方法write,简化document.write操作
        ,write: function(para) {
            document.write(para + this.field1);
        }
    }

       //类2
      ,class2: {
        //方法1
        method1: function(para) {
            document.write(‘e.g.1: namespace.class2.method1 para:‘ + para + ‘<br/><br/>‘);
        }
        //方法2
        ,method2: function(para) {
            //调用类1中的方法write
            var myClass1 = namespace.class1;
            myClass1.write(‘e.g.1: 调用类1中的方法write:‘ + para);
        }
    }
};
//命名空间-类1-方法1-传入参数xxx 输出:e.g.1: namespace.class1.method1 para:xxx
namespace.class1.method1(‘xxx‘);

//命名空间-类1-方法2-传入参数yyy
namespace.class1.method2(‘yyy‘);

//命名空间-类1-方法1-传入参数aaa
namespace.class2.method1(‘aaa‘)

var json = { "a":{"key":"value"}, "b":{"key":"value"} };有没发现上面的方法和这个JSON结构是类似的。

今天就到这了,都是一些个人拙见,当中也有参考资料,有问题还请大家指出,偶去陪老婆觉觉了:-)

时间: 2024-11-05 13:47:59

解惑之JavaScript的相关文章

分享我收集的前端好资源:网址、文章、工具、框架、电子书

分享我收集的前端好资源:网址.文章.工具.框架.电子书 前言 开始全职前端开发已经9个月了,在这9个月中收集了一还自认为还不错的资源,整理在了一个小网站上(http://www.cnfeinfo.com/),现在分享出来,希望对各位前端攻城师有用. 如果看了本文后,觉得这些资源还不错,对你有所帮助,别忘了“推荐”一下哦,能帮到大家是我最大的动力,谢谢! 前端好网址 CSS3动画参考 提供CSS3的案例.动画手册和CSS3动画生成工具 张鑫旭-鑫空间-鑫生活 张鑫旭个人博客,主要为web前端方向的

[解惑]JavaScript事件机制

[解惑]JavaScript事件机制 初学 JS 的童鞋经常会有诸多疑问,我在很多 QQ 群也混了好几年了,耳濡目染也也收获了不少,以后会总结下问题的结论,顺便说说相关知识的扩展~ 如果贸然回答还会冒泡,这不太好的,稍微严谨点考虑 0级 DOM 事件模型的话,这个答案是否定的.但是在 2级 DOM 事件模型中,答案是肯定的,这个问题值得探讨记录下. 本文地址:http://www.cnblogs.com/hustskyking/p/problem-javascript-event.html 一.

Javascript TypedArray 解惑:Uint8Array 与 Uint8ClampedArray 的区别

JS的类型数组大体可分为3类:无符号整数.有符号整数.浮点数. Int8Array; Uint8Array; Uint8ClampedArray; Int16Array; Uint16Array; Int32Array; Uint32Array; Float32Array; Float64Array; 基本上都可以望文生义,看名字就知道怎么回事. 但是有一个例外 Uint8ClampedArray ,它与 Uint8Array 颇为相似,但又有所区别. 因为颜色数据刚好都是符合8位二进制的无符号

JavaScript 闭包究竟是什么

JavaScript 闭包究竟是什么 1.简单的例子 首先从一个经典错误谈起,页面上有若干个div, 我们想给它们绑定一个onclick方法,于是有了下面的代码 <div id="divTest"> <span>0</span> <span>1</span> <span>2</span> <span>3</span> </div> <div id="d

微信公众平台开发教程新手解惑40则

[编者按]由CSDN和<程序员>杂志联合主办的 2014年微信开发者大会 将于8月23日在北京举行,邀请了来自于一线的微信开发商技术负责人或资深工程师从企业应用开发高级篇.智能客服与LBS.微信支付.微信上的HTML5社交应用.微信小店开发等角度为与会者带来实战分享( 议程 ).目前报名处于优惠票价阶段,通过申请加入CSDN CTO俱乐部即可享受8折购票价格(票款中均含午餐),在8月1日前完成付款的同学还将免费获赠微信开发图书一本(两选一,活动现场发放).  值得一提的是,CSDN优秀博主.畅

JavaScript 原型 原型链

一. 普通对象与函数对象 JavaScript 中,万物皆对象!但对象也是有区别的.分为普通对象和函数对象,Object .Function 是 JS 自带的函数对象.下面举例说明 var o1 = {}; var o2 =new Object(); var o3 = new f1(); function f1(){}; var f2 = function(){}; var f3 = new Function('str','console.log(str)'); console.log(type

javascript的事件机制

一.事件模型 IE 和 标准DOM的事件模型 IE系:冒泡方式 NETSCAPE系:捕获方式 标准DOM:先捕获再冒泡 冒泡,从触发点向外层.顶层扩散,最后到达document.window,遇到相同注册事件立即触发执行: 捕获则相反,从window.document向里收缩,一直到触发点,遇到相同注册事件立即触发执行: 有代码如下: <style type="text/css"> div { border: solid 1px red; } #s1 { padding:

DWR3.0 服务器推送及解惑

前言 环境搭建 建立工程 jar包填装 下载dwrjar 下载commons-loggingjar 项目目录 webxml dwrxml java文件 jsp页面 调试运行 文字展示 图片展示 解惑篇 关于自动生成的js文件 如何配置页面脚本 客户端怎么调用服务器端方法 总结 前言 昨天晚上偶然咋慕课网上看到了一个DWR的视频,一开始我还以为是DreamWaver的缩写,后来发现我错了,原来人家是Direct Web Remoting的缩写. DWR说白了是一个用于改善web页面与Java类交互

javascript学习中自己对作用域和作用域链理解

在javascript学习中作用域和作用域链还是相对难理解些,下面我关于javascript作用域和作用域链做一下详细介绍,给各位初学者答疑解惑. 首先我们介绍一下什么是作用域?  从字面上理解就是起作用的区域.   作用域主要有两种作用域:      1.块级作用域(js 不支持):主要用于C系列语言中,例如:Java Object-c/Swift(苹果开发语言).C++/C#.在此不做过多说明.      2.词法作用域  一个变量的作用范围,在代码写出来的那一刻就定下来了,不会根据代码的运