JavaScript程序设计语言有如下几个特点:
- 解释型语言
- 类似于C和Java的语法结构
- 动态语言
- 基于原型的面向对象
- 字面量的表现能力
- 函数式编程
解释型语言直接运行环境中执行代码。解释型语言的劣势在于,其运行速度通常都会慢于编译型语言。解释型语言由于使用了JIT(Just In Time)这种能够运行中进行编译的技术,使得运行速度得以改善。
从代码角度看,动态语言的变量和函数是不指定返回值类型。
【评】摘抄一下,解释型语言和动态语言的含义,具体理解应该要看一下代码,其他的没有什么重点直接忽略。
变量的作用是给某一个值或是对象标注名称。
使用关键字var就可以对变量声明。
【评】在C语言中有各种各样的关键字去定义变量,但是JavaScript只有关键字var,毕竟它是弱数据类型。
var hzh; // 声明变量hzh var HZH; // 声明变量HZH var huangzihan; // 声明变量huangzihan var Huangzihan; // 声明变量Huangzihan var HuangZihan; // 声明变量HuangZihan
通过赋值运算符(=)可以给变量赋值,即在运算符的左侧书写变量,而在右侧书写要赋的值。
var hzh = "黄子涵是帅哥!"; // 将字符串"黄子涵是帅哥!"赋值给变量hzh var HZH = "黄子涵是靓仔!"; // 将字符串"黄子涵是靓仔!"赋值给变量HZH var huangzihan = "黄子涵真厉害!"; // 将字符串"黄子涵真厉害!"赋值给变量huangzihan var Huangzihan = "黄子涵真聪明!"; // 将字符串"黄子涵真聪明!"赋值给变量Huangzihan var HuangZihan = "黄子涵真棒!"; // 将字符串"黄子涵真棒!"赋值给变量HuangZihan
被声明但未进行任何赋值的变量,其值为undefined。读取这类变量的值不会引起运行时错误。需要注意的是,在大部分情况下,读取undefined值都是产生错误的根源。
var huangzihan; console.log(huangzihan);
如果要读取没有被声明的变量(即作为右值使用该变量),就会引发ReferenceError异常;如果将其作为左值使用,即作为赋值对象使用,则不会发生错误。
console.log(huangzihan);
【评】自己都是不要省略,无语!
如果要声明一个常量,需要使用const关键字而不是var。可以作为常量名使用的字符和变量的是相同,不过习惯上常量名都以大写字母表示。
const HZH = 1; const HUANGZIHAN = 2; console.log(HZH); console.log(HUANGZIHAN);
如果在声明时没有对常量进行赋值的话,它的值就是undefined,对其的处理方式和变量相同。
const HZH; const HUANGZIHAN; console.log(HZH); console.log(HUANGZIHAN);
函数是由一连串的子程序(语句的集合)所组成的,可以被外部程序调用。向函数传递参数之后,函数可以返回一定的值。
console.log("1"); function hzh() { // 声明函数 console.log("2"); } console.log("3"); // 调用函数 hzh();
可以通过函数声明语句来定义一个函数。函数声明语句以关键字function开始,其后跟有函数名、参数列表和函数体。其语法如下所示:
// 函数名为sum,参数名为a和b // 函数声明中所写的参数称为形参(形式参数) function huangzihan (a,b) { return Number(a) + Number(b); } // 函数sum的调用 // 调用函数时,传递给函数的参数称为实参(实际参数) console.log(huangzihan(3,4));
函数声明时不必指定形参的类型。任何类型的值都可以作为实参传递,因而开发者在设计函数时需要考虑接收错误类型的值的情况。此外,形参的数量和实参的数量可以不一致。所以,在JavaScript中不存在函数重载。
匿名函数的语法形式在function后跟可以省略的函数名、参数列表以及函数体。其语法如下所示:
函数声明语句和匿名函数表达式在语法上几乎一模一样,唯一的区别仅仅是能否省略函数名称。
可以通过对象字面量表达式来生成一个对象。对象字面量表达式由大括号{}括起,内部有属性名和属性值。
{ hzh :2, huangzihan:1 } // 属性名是标识符 { "hzh" :2, "huangzihan":1 } // 属性名是字符串值 { 'hzh' :2, 'huangzihan':1 } // 属性名是字符串值 { 1:2, 2:1 } // 属性名是数值 { hzh:2, huangzihan:1, enable:true, color:{ r:255, g:255, b:255 }} //各种类型的属性值
可以通过点运算符(.)访问对象引用中的属性。只要在点运算符之后书写属性名,就能够读取相应的属性值。
var hzh = { huangzihan:3 }; // 显示对象hzh的属性huangzihan的值 console.log("hzh.huangzihan:" + hzh.huangzihan); // 如果属性的值是一个对象,可以通过多次点运算来读取其属性 var hzh2 = { huangzihan: { x:3, y:4 }}; console.log("hzh2.huangzihan.x:" + hzh2.huangzihan.x); console.log("hzh2.huangzihan.y:" + hzh2.huangzihan.y); // 在赋值表达式的左侧书写属性访问表达式的话,就可以将相应的值赋给该属性。 hzh.huangzihan = 2333; // 这将覆盖已有的属性值 console.log("hzh.huangzihan:" + hzh.huangzihan); // 如果赋值给尚不存在的属性名,则将新建该属性并对其赋值。 hzh.huangchunqin = 5; console.log("hzh.huangchunqin:" + hzh.huangchunqin);