最近迷茫了一段时间,不知道应该从何处开始学习前端知识,好像这种状态已经持续了一年了,天天也在看前端的东西,但是记住的多少或者说在脑中一团糟,没有什么清晰的概念。最近加入了jQuery源码交流群( 239147101),虽然有时候在群里不说话,或者在里面扯扯淡,在里面学到了不少知识,群主Aaron是个好人,叶小钗是个牛人,告诉我要坚持写博客,谢谢群里的哥们们。感觉刚开始写无从下手,希望以后越来越好,大家尽量给我提意见哈。
PS:239147101群里的学习氛围特别浓,无论是技术还是人生,吐槽人生,吐槽公司,吐槽12306。最近群里兴起了一股学习英语风,拜Aaron所赐,群主天天学英语,如果想提高技术的同时学习英语,那么欢迎大家加入。请大家注意一下,群里的人都是用工作的人,天天都是很忙的,有些简单的知识自己去网上找找,想要实现的小功能什么的自己多琢磨一下,不要什么问题都在群里问,大家都很忙的,当然一些实在不懂的地方可以请教大家。提问题要理性,大家都是为了进步,记住,提出你无论怎么都搞不定的问题。
基本概念
语法
其实对于学过C语言的同学来说,学习其他语言还是比较容易的,因为C是经典的编程语言,许多后来的语言都是借鉴了C语言的写法,Javascript同样也是如此。
区分大小写
这个很好理解,javascript中一切都是区分大小写,包括变量,函数名,操作符。例:var a=0和var A=1不是同一个变量。
标识符
标识符就是变量、函数、属性的名字,这个也和其它的语言差不多。
- 第一个字符必须是字母、数字和下划线或者一个$
- 其它随便了,数字、字母、下划线、$都行
注释
同样是C语言的风格,单行注释和块级注释。
- // 单行注释以两个斜杠开头
-
/*
*块级注释一个斜杠和一个星号开头,一个星号和一个斜杠结尾
*/
语句
ECMAScript的语句是以一个分号结尾的,不写分号的话,解析器会确定结尾,在这里我们记住必须每一个语句必须以分号结尾就好了,如果想javascript语句具有较好的可读性的话就用C语言那一套就好了。例如,条件控制语句if,即使后面只有一条语句也要使用花括号。
1 //不推荐使用 2 if(b_var) 3 console.log(b_var); 4 //推荐 5 if(b_var){ 6 console.log(b_var); 7 }
关键字和保留字
关键字和保留字就是系统自己使用的或者以后可能会使用的有特殊用途的字符,我们不能自己声明和使用这些标识符了。
关键字
保留字
上述的关键字和保留字可能不是很全,其实我们也不必记住这些东西,大概知道就行。假如我们真的忘记了这些特殊的标识符,在应用中使用它声明了变量什么的,记住报什么错误,找到它改了就ok了,如果把关键字用作变量名或函数名,可能得到诸如 "Identifier Expected"(应该有标识符、期望标识符)这样的错误消息。
例子:chrome IE
严格模式
除了正常运行模式,ECMAscript 5添加了第二种运行模式:严格模式(strict mode),使得Javascript在更严格的条件下运行。由于javascript是松散型语言,有些地方肯定没有严格的限制,引入这种模式就是为了使javascript更加的严格,规范,安全。使用严格模式有两种方式:
-
要想在整个脚本中启用严格模式,则需要在顶部加上代码
1 "use strict"; -
要想一个函数在严格模式下执行则需在函数内部的顶部加上代码
function useStrict(){ "use strict"; //函数内容 }
严格模式模式的详细信息,请看http://www.ruanyifeng.com/blog/2013/01/javascript_strict_mode.html
变量
javascript的变量是松散类型的,也就是说一个变量可以存任何类型的数据,这在C语言中是不允许的,《javascript高级程序设计》中说每个变量只是存储一个值的占位符而已。定义一个变量使用关键字var。
1 //定义变量 2 var test; 3 //赋值 4 test = 1; 5 //改变test的值 6 test = 2; 7 //改变test的类型和值 8 test = "string";
定义一个变量之后可以随便更改它的类型和值,但是不推荐这种做法。另外,使用var定义的变量是在所在作用域的局部变量。
//全局变量,全局使用 var global = 1;//等于gloabal = 1,但是不推荐 function test(){ //局部变量,只能在函数内部使用 var inner = 2; //函数内部使用var关键字定义变量相当于定义一个局部变量,严格模式下会报错 outer = 3; } test();//函数必须执行,执行之后内部的变量才能被定义 alert(inner);//报错 alert(outer);//正常
也可以一次定义多个变量,和C语言一样
var name = "allenxing", age = 25, sex = "male";
附加一点前几天看到的,变量声明的提前
1 var y= 1;//定义变量 2 function test(){ 3 console.log(y);//访问局部变量 4 var y = 2; //定义一个和全局变量同名的局部变量 5 } 6 test();//输入undefined
在函数的内定义的变量会提升位置,var y = 2等价于var y; y = 2;定义一个变量无论在什么位置会提升到该变量所在作用域的顶部,而赋值保留在原位置,即
1 var y= 1;//定义变量 2 function test(){ 3 var y;//提升位置,此时y为undefined 4 console.log(y);//访问全局变量 5 y = 2; //定义一个和全局变量同名的局部变量 6 console.log(y); 7 } 8 test();//输出undefined和2
数据类型
javascript中有五种简单数据类型和一种复杂数据类型Object,这五种简单类型分别为Undefined,Boolean,Number,String,Null。Array不属于基本数据类型,Array是这几种数据类型组合而成的。
typeof
typeof操作符就是检验数据类型的,它的返回值是一个字符串,可能为:"undefined","number","boolean","string","object","function"。
1 var n = 1; 2 console.log(typeof n);//"number" 3 var s = "string"; 4 console.log(typeof s);//"string" 5 var b = true; 6 console.log(typeof b);//"boolen" 7 var u = undefined;//或var u; 8 console.log(typeof u);//"undefined" 9 var nu = null;//注意 10 console.log(typeof nu);//"object" 11 var o = {}; 12 console.log(typeof o);//"object" 13 function test(){}; 14 console.log(typeof test);//"function" 15 var nn = new number(1);//new 出来的为object 16 console.log(typeof nn);//"object"