javascript各种专业名词
刚开始学javascript经常看到各种专业名词,在此整理一下个人的学习笔记:
直接量
直接量——就是程序中直接使用的数据值,如:
88 //数字(String)
"hello world" //字符串(Number)
true //布尔值(Boobean)
/[a-z][0-9]/ //正则表达式(RegExp)
null //空值(null)
{x:1,y:2} //对象(Object)
[1,2,3,4,5] //数组(Array)
标识符(变量名)
标识符——就是一个名字,用来对变量和函数进行命名,说白了就是变量名,如:
var str="hello world" //str就是一个标识符
function sayHi(){ alert("hello world");} //sayHi就是一个标识符
保留字与关键字
关键字——是被js定义过的单词,如:var,function
保留字——目前还没被js定义单词,但是以后肯能会被js定义使用的单词,也就是很有可能在未来版本的js中会成为关键字的单词。所以不能使用保留字做标识符,如果用了,一旦新版本js发布,那么你之前的程序就会报错了。
数据类型
数据类型分为:原始类型、对象类型、null、underfined
原始类型——包括数字,字符串,布尔值
对象类型——除了数字,字符串,布尔值,null,underfined之外的都是对象。
null,underfined分别代表了各自特殊类型的唯一成员。
变量声明
变量声明——也就是使用var关键字来声明变量,如果在声明的时候未赋值,则它的初始值就是underfined。
用var关键字在函数体外声明的变量是全局变量;在函数体内使用var声明的变量则是局部变量,该变量只对该函数可见。
如果未使用var关键字声明的变量,无论它是否在函数体内声明的,它都是全局变量。
他们的区别是,使用var关键字声明的变量不能被delete删除,而未使用var声明的变量则是可以删除的。
var str="使用var声明的变量"; str2="我未使用var关键字"; console.log(delete str); //false console.log(delete str2); //true console.log(str); //使用var声明的变量 console.log(str2); //str2 is not defined
函数作用域和声明提前
函数作用域——变量在声明它们的函数体以及这个函数体嵌套的任意函数体内都是有定于的。也就是说函数内声明的所有变量在函数体内始终是可见的。正因如此,使得在函数体内,变量在声明之前已经可用——这个特征被称为“声明提前”。
1 var scope="global"; 2 function f(){ 3 console.log(scope); //输出的是"underfined",而不是global 4 var scope="local"; 5 console.log(scope); //输出的是"local" 6 } 7 f(); 8 console.log(scope); //输出的是"global" 9 10 //上面的代码等同于: 11 var scope="global"; 12 function f(){ 13 var scope; //声明为赋值,初始值就是underfined 14 console.log(scope); //输出的是"underfined",而不是global 15 var scope="local"; 16 console.log(scope); //输出的是"local" 17 } 18 f(); 19 console.log(scope); //输出的是"global"
在把代码修改一下,就可以看出声明变量的是时候是否使用var关键字的区别了:
1 var scope="global"; 2 function f(){ 3 console.log(scope); //输出的是"global",而不是"underfined" 4 scope="local"; //未使用var关键字声明的变量是全局变量,在此会把之前的同名的全局变量的值修改了。 5 console.log(scope); //输出的是"local",而不是"global" 6 } 7 f(); 8 console.log(scope); //输出的是"local",原来的值被覆盖了