数据类型
- 语法结构
- 数据类型
- 变量
一、语法结构
1.1、字符集
JavaScript程序使用Unicode字符集编写的。,Unicode是ASCII和Latin-1的超集,几乎支持地球上所有在用的语言。ECMAScript 3要求JavaScript的实现必须支持Unicode 2.1及后续版本,ECMAScript 5则要求支持Unicode 3及后续版本。
HTML(不包括XHTL)中的标签可以不区分大小写,浏览器都可以正常解析。但JavaScript和Java都是严格区分大小写的,像name和Name是两个变量,while是关键字,而While却不是。
1.2、注释
-
单行注释
//这是单行注释
-
多行注释
/*这是多行注释*/
1.3、标识符
标识符就是用来命名变量和函数的字符串。JavaScript中允许的标识符为:字母、数字、下划线、美元符号,但不能以数字开头。至于JavaScript中的保留字我这里也懒得列举了,反正在各种编译器中保留字(关键字)都会变色。
二、数据类型
2.1、原始数据类型
- number:数字。整数、小数、NaN,NaN表示不是数字的数字。
- string:字符串。单引、双引都可以
- boolean:true、false
- null:空对象
- undefind:未定义,即声明了但没有赋值的变量
var number1 = 11;
var str1 = "qwer";
var boolean = true;
var test1 = null;
var test2;//声明未赋值的变量,统一自带默认值:undefind
console.log(number1+"--"+typeof(number1));//11--number
console.log(str1+"--"+typeof(str1));//qwer--string
console.log(boolean+"--"+typeof(boolean));//true--boolean
console.log(test1+"--"+typeof(test1));//null--object
console.log(test2+"--"+typeof(test2));//undefind--undefind
typeof(变量名):用于返回该变量的数据类型
1.2、引用数据类型
- Object
- Function
- 8个基本对象
三、变量
3.1、定义
一块存储数据的内存空间。
3.2、使用
var num1 = 1;
let num2 = 2;//ECMAScript 6 开始可用
3.3、变量同名问题
在JS中变量是可以同名的,但是后面的变量会覆盖前面的变量,因为它底层是通过修改内存指向来实现的。如果在函数中声明了一个与函数外同名的变量,则不会覆盖而是创建一个新的局部变量,在使用上遵循就近原则。
var num1= 9;
var num1 = 10;//对于基本变量直接修改数值,对于引用变量则修改内存指向。
console.log(num1);//10
f1();//11
console.log(num1);//10
function f1() {
var num1 = 11;
console.log(num1);
}
3.4、声明遗漏和声明提前
声明遗漏:在程序中如果直接去使用一个未曾声明的变量,JS会直接报错。
声明提前:在同一个作用域中,任何地方的变量声明(不包括赋值)都会被最先加载。这意味着你可以先使用变量再进行声明。
var num1 = 10;
console.log(num1);//10
console.log(num2);//undefined,因为声明提前了但是赋值没有提前
var num2 = 11;
f1();//undefined,因为声明提前了但是赋值没有提前
console.log(num4);//变量没有被声明,JS直接报错:num4 is not defined
function f1() {
console.log(num3);
var num3 = 12;
}
3.5、var和let的区别
- 通过var声明的变量属于window对象,可以用window点出来(window.onload()里面不行),自然也可以跨域使用。用var声明同名的变量会覆盖前面声明的同名变量。在函数中用var声明的变量仍然不能拿到函数体外使用,但是如果不用var声明则可以,比如:b=11,b可以在外面使用,前提是该函数已经被加载。
- 通过let声明的变量不属于window对象,可以当作Java中的局部变量来对待,出生自带一个作用域,出了作用域就会被释放掉。如果在相同作用域中声明同名的变量,直接报错。
window.onload=function (ev) {
var num1 = 11;
{
console.log(num1);//11
var num1 = 12;//覆盖前面的变量
}
console.log(num1);//12
let num2 = 11;
{
//console.log(num2);这地方是个坑,涉及的东西挺多
let num2 = 12;
console.log(num2);//12
}
console.log(num2);//11
};