JavaScript编程

  • 一、JavaScript语法
  • 1、变量
  • (1)交互式运行环境——REPL
  • (2)浏览器环境——Chrome
  • (3)关键字var
  • (4)变量的命名
  • (5)变量提升机制
  • 2、注释
  • 3、数据类型
  • (1)利用typeof区分数据类型
  • (2)、利用Boolean()转化数据类型
  • 4、函数
  • 5、闭包
  • 二、命名规范与编程规范
  • 1、命名规范
  • (1)var关键字
  • (2)驼峰命名法
  • (3)常量
  • (4)内部变量
  • (5)有意义的名字
  • 2、编程规范
  • (1)以分号结尾
  • (2)大括号
  • (3)===
  • (4)空格的使用


一、JavaScript语法

JavaScript是一门直译式、弱类型的脚本语言,也是Web开发最重要的语言之一。

1、变量

(1)交互式运行环境——REPL

Node.js提供了一个交互式运行环境——REPL。在这个交互式环境中可以运行简单的应用程序。

提示:如果要退出该运行环境,连续两次Ctrl+C快捷键,或者输入.exit。Node.js的命令需要在前面加点。

(2)浏览器环境——Chrome

在Chrome浏览器中的Console面板中也可以达到和REPL相同的效果。

(3)关键字var

JavaScript的变量通过关键字var来声明。JavaScript是一门弱类型的编程语言,JavaScript的所有数据类型都可以用var来声明,通过var 变量名=值的形式就可以对变量同时进行声明和赋值。和许多语言一样,JavaScript通过分号“;”来分隔不同的语句。
相关例子如下所示:

var a = "hello";
var b = 1;

(4)变量的命名

JavaScript规定变量名必须以字母、美元符($)、下划线(_)三者之一开头,同时JavaScript对大小写敏感,大小写不同也就意味着是不同的两个变量。同时JavaScript不区分单引号与双引号。

(5)变量提升机制

JavaScript中存在变量提升机制,也就是说所有的变量声明在运行时都会提升到代码的最前面。

2、注释

JavaScript中的注释和很多其他编程语言类似,以双斜杠(//)代表单行注释,以“//”形式代表多行注释。

3、数据类型

JavaScript中的数据类型可以分为简单数据类型和复杂数据类型。简单数据类型有undefined、boolean、number、string、null,复杂数据类型有object。object是由一组无序的键值对组成。

(1)利用typeof区分数据类型

利用操作符typeof可以部分区分以上的数据类型。typeof返回的值有undefined、boolean、number、string、object和function。
例如:

var a;
console.log(typeof a);

注:null和object类型的数据,经过typeof区分后均会返回object,因为null实际上是一个空对象指针。

(2)、利用Boolean()转化数据类型

JavaScript中可以利用Boolean()方法将其他数据类型转化为布尔值。需要注意的是,空字符串、0、null、undefined、NaN都将转化成false,其他值转化成true。

4、函数

在JavaScript中,声明一个函数只需要使用function关键字即可,如声明一个求和的函数。
代码如下:

function add(num1, num2) {
	return num1 + num2;
}

当然函数同样可以作为一个值传递给一个变量,例如:

var add = function(num1, num2) {
	return num1 + num2;
}

调用一个函数可以在函数声明之后使用”函数名(参数)“的形式进行调用。

函数中默认带有一个arguments参数,这是一个类数组对象。arguments记录了传递给函数的参数信息,因为JavaScript中的函数调用时,参数个数并不需要和定义函数时的个数一致。
利用好这一点和arguments类数组特性可以对上述的add方法进行拓展,然这个函数无论接收多少个参数,总能返回这些数值的和:

function add() {
	var sum = 0;
	for(var i = 0, max = arguments.length; i < max; i++) {
		sum += arguments[i];
	}
	return sum;
}
 add(1,2,3);

还可以利用JavaScript中的arguments类数组对象模拟函数重载。当然,实际上JavaScript并不支持重载,比如通过检测arguments对象的length属性做出不同的反应来模拟重载。
相关代码示例如下所示:

function operate() {
	if(arguments.length == 2) {
		return arguments[0] * arguments[1];
	} else {
		var sum = 0;
		for(var i = 0, max = arguments.length; i < max; i++) {
			sum += arguments[i];
		}
		reutrn sum;
	}
}
operate(1,2);
operate(1,2,3);

arguments对象是一个类数组对象。通过数组的slice()方法可以把arguments对象转化为一个真正的数组,这样就可以使用数组的所有方法,而不用担心出现其他的问题。

function funName() {
	var arguments = [].slice.call(arguments);
}

5、闭包

JavaScript中的变量可以分为全局变量和局部变量。JavaScript中的函数自然可以读到全局变量,而函数外部并不能督导函数内部定义的变量。
当然,这需要在定义变量的时候使用var关键词定义。不用var关键字定义的话,这个变量会成为全局对象的一个属性。在Node.js中,全局对象是global。
例如:

var str = 'hello';
function copy() {
	str1 = str;
	console.log(str1);
}
copy(); //hello
console.log(str1); //hello

提示:建立所有的变量都使用var关键字进行定义,以避免不必要的错误出现。

JavaScript中的闭包可以让函数读到其它函数内部的变量,如下代码就可以让函数之外读到函数内部定义的变量,这就是最简单的闭包。

function a() {
 	var str = 'hello';
 	return function() {
 		var str1 = str + 'world';
 		return str1;
 	}
 }
 a()(); //helloworld

二、命名规范与编程规范

1、命名规范

(1)var关键字

JavaScript中,所有的变量都应该通过var关键字来定义,而不是缺少var关键字,因为缺少var变量声明会使得这个变量成为全局变量,在开发中则应尽量减少全局变量。

(2)驼峰命名法

驼峰命名法命名变量的方法是第一个单词的开头小写,其他单词的开头字符大写。

(3)常量

常量是一种不允许在声明赋值之后再修改的变量。再常量的命令中,开发人员往往采用变量名全部大写的方式来表达这是一个常量。

(4)内部变量

内部变量并不希望局部作用域之外的作用域来获取这些变量。开发人员通常以下划线”_“开头命令作为约定俗成的内部变量。

(5)有意义的名字

在命名中不应该使用一些无意义的变量名,而应该使用一些有意义的、能够表示变量作用的命名。

2、编程规范

(1)以分号结尾

在JavaScript代码中,所有的语句都应该以分号结尾,虽然JavaScript中并没有强制要求。

(2)大括号

所有的语句块都应该使用大括号,虽然一些语句块在不适用大括号的过程中也不会出现错误,但是统一均使用大括号可以更好的方便开发人员进行阅读。

(3)===

相等判断中应该尽量使用绝对相等”===“,因为等于"==“存在着类型转化,这在开发中可能会出现意向不到的错误。

(4)空格的使用

建议在数值操作符(如+、-、*、/、%等)前后留有一个空格,在赋值操作符和相等判断前后留有一个空格。在json对象中键值对的冒号后应该留有一个空格。