javascript基本概念

来源:互联网 发布:剑网3脸型数据非法 编辑:程序博客网 时间:2024/04/28 17:40

我比较不喜欢的语言,目前有2个:javascriptshell。但是没有办法啊,web开发javascript是必须的,linux系统管理,系统编程都需要掌握shell。所以生活很常都不能按着自己的意愿来,很多时候必须硬着头皮上。

 

以下总结一下javascript的基本概念。

一个大原则是:动态语言可以的变量使用几乎可以随心所欲,但是如果太随心所欲,一定会陷入某些陷阱中,所以使用变量前必须先声明,而且能赋初值的一定赋初值,另外,必须清楚变量的类型。

 

一般变量的声明:

var a, b, c;       //分号不是必须的,但是逗号是必须的,写在一行,必须是逗号

 

数组的声明和赋初值:

1.       var arr = new Array()     //这里的声明是必须的

arr[0] = “jonda”;

arr[1] = “zhong”;

arr[2] = 33;

也可以声明时直接赋初值:var arr = new Array(“jonda”, “zhong”, 33);

 

2.       var arr = [“jonda”, “zhong”, 33];

 

3.       javascript里面没有二维数组的概念,但是可以模拟。

var arr2 = new Array();

arr2[0] = new Array();

arr2[1] = new Array();

arr2[2] = new Array();

arr2[0][0] = 3;

arr[0][1] = 4;

arr[1][0] = “nihao”;

附:c语言中数组:int arr[3] = {3,4,5};

Php中数组:$arr = array(3,4,5);

 

Json数据(也就是哈希或者是pythonerlang中字典)

var obj = {name:”jonda”, age:22}

可以嵌套使用:var obj = {name:{first:”zhong”, last:”changda”}, age:22}

 

Json可以和数组混合使用:

var obj = [{name:”jonda”}, {name:”jiang”}, {name:”zhong”}];

访问:obj[0].name或者obj[0][“name”]

 

var obj = {name:[“jonda”, “jiang”, “zhong”], age:22};

访问:obj.name[0]或者obj[“name”][0]

 

遍历json数据:

 for( var p in obj){

   //其中p是索引,所以obj[p]是值

 }

 

闭包:是一种特殊的函数,它嵌入到“其他函数”中,在闭包看来,“其他函数”中的变量是全局的。这种机制主要是使变量隐藏在“其他函数”中,这样封装性,安全性高一些。

 

面向对象:有如下2种比较优雅的方法。

采用构造函数+原型:构造函数用于属性,原型用于方法

function Person(name, age){

  this.name = name;

  this.age = age;

}

 

Person.prototype.setName = function(name){

  this.name = name;

}

 

如下一种是网上看到的:

   var Class = {

        create: function()

        {

            return function()

            {

                this.initialize.apply(this, arguments);

            }

        }

    }

    // 这是prototype.js里面的类构造方法,使用方法是:

    var myClass = Class.create();

 

    // 这样就可以创建一个类了。

    // 继续加入:

    myClass.prototype =

    {

        a : 2,

        b : 3,

 

        x : function (m_x)

        {

            return (this.a * m_x);

        },

 

         y : function (m_y)

        {

            return (this.b + m_y);

        },

       

        initialize : function (m_value)

        {

            alert(m_value + ':' + this.x(2) + this.y(4));

        }

    }

    // 那么,你在实例化该类的时候:

var mclass = new myClass('结果');

 

以下是一些比较重要的函数:

数组方法:

length slice join concat push pop shift unshift sort reverse splice插入

 

字符串方法:字符串是不可变的,指针方式存放的

length charAt charCodeAt concat indexOf lastIndexOf localeCompare split

substring负数参数变0 slice toLowerCase

 

日期方法:

var d1 = new Date(2005, 8,23);

getDate getDay getFullYear getMonth getMinutes

 

尽量使用encodeURI encodeURIComponent以及相应的decodeURI decodeURIComponent,因为他们会对所有的unicode字符进行编码,而escapeunescape只对ascii编码。。。为什么编码呢,因为uri对某些字符,如空格不能识别,所以通过编码,使之成为合法的uri

 

eval("alert('hello world')");

var msg = "hello";

eval("alert(msg)");

 

正则表达式方法:

test()exec() 以及 compile()

var patt1=new RegExp("e");

直接量语法

/pattern/attributes        默认是大小写敏感,只匹配一个就结束

创建 RegExp 对象的语法:

new RegExp(pattern, attributes);

 

document.write(patt1.test("The best things in life are free"));

 

var str="1 plus 2 equal 3"

document.write(str.match(//d+/g))

 

name = 'aaa bbb ccc';

uw=name.replace(//b/w+/b/g, function(word){

  return word.substring(0,1).toUpperCase()+word.substring(1);}

  );

 

name = '"a", "b"';

name.replace(/"([^"]*)"/g, "'$1'");

正则表达式中默认的是贪心匹配。如果要实现非贪心匹配,需要使用?

匹配符。

原创粉丝点击