3.基本概念
3.1语法
JavaScript的语法都区分大小写
标识符:
- 第一个字符必须是字母,下划线,$
- 其他字符可以是以上字符和数字
- 按照惯例,ECMAscript使用驼峰大小写
严格模式:
在顶部添加"use strict";
在该模式下,一些不确定的行为将会得到处理
3.2关键字和保留字
let和yield是第五版定义的
3.3变量
ECMAscript的变量是松散类型的,可以保存任何数据,定义变量用var
tip:用var定义变量的变量将会成为该作用域中的局部变量
function test(){
var message = 100;
}//在函数中创建的是局部变量,函数调用时创建该变量为其赋值,调用之后该值被销毁
test();
alert(message);//错误的
如果定义变量时不加var,则成为全局变量,不过在严格模式下会出错(不推荐)
function test(){
message = 100;
}//没有使用var声明说明时全局变量
test();
alert(message);//正确的
3.4 数据类型
ECMAscript中有5中简单数据类型(也称基本数据类型),undefined、Null、Boolean、Number、String
简单数据类型存储在栈里面
复杂数据首先在栈里面存放地址,这个地址指向堆里面的数据。
简单数据类型传参的时候传递的是值
复杂数据类型传递的是地址
还有一种特殊的类型:Object
undefined
undefined类型只有一个值就是undefined
它表示的是声明了变量但是没有对其赋值,这个变量的值就是undefined
没有初始化的值
tip:对未初始化的变量和未声明的变量进行typeof得到的都是undefined,从技术角度没有任何区别,但是实际上任何变量都不能执行真正的操作
Null
null也是只有一个值的数据类型,null
null表示的是一个空的对象(与undefined区分)
如果定于的变量准备用来存储对象,那么这个变量应该初始化成为null
undefined派生于null,所以null==undefined返回的是true
Boolean
该类型只有两个值,true和false(这两个值区分大小写)
ECMAscript中所有类型的值都有与这两个布尔值等价的值,可以调用Boolean()
var message = "hello wolrd";
if(message)//这里的message=Boolean(message)
{
alert(message);
}
alert(message);
Number
最基本的数值是十进制,还可以通过八进制,十六进制
八进制0开头,如果字面值中的数值超过范围那么前导0将被忽略转换为十进制
在进行算术计算时,八进制和十六进制都将会转换为十进制
浮点数:
浮点数占据的内存时整数的两倍,所以ECMAscript会尽量将浮点数转成整数如1.和10.0
支持科学计数法
永远不要测试某个特定的浮点数,精度不够
数值范围
最小的值时Number.MIN_VALUE
最大的值时Number.MAX_VALUE
超过极限会转换为特殊的infinity
NaN
非数值是一个特殊的数值,这个数值用来表示一个本来要返回数值的的操作数未返回数值的情况(如任何数/0)
NaN与任何数值都不相等,包括本身
ECMAscript定义了isNaN函数来确定这个参数是不是数值,任何不能转换为数值的值都会返回true
数值转换
-
Number
- 如果字符串包含数字则将其转换成十进制
- 如果是对象则使用valueof方法
-
parseInt()
- 一般常用于转换字符串
-
parseFloat()
string
任何字符串都可以通过其length属性获得
ECMAscript规定字符串一旦创建,它的值不能更改
转换为字符串
方法toString():不能转换null和undefined
num.toString()
转型函数String():可以转换
String(num);
Object
在ecmascript中对象就是一组数据和功能的集和
创建方法:
var o = new Object;
object类是所有类的父类
3.5 操作符
逻辑操作属于短路操作,如果第一个操作数能决定结果那么就不会执行第二个操作
任何数字和NAN比较都会返回false
全等操作符
只在两个操作数未经转换就相等的情况下返回true
为了保持数据类型的完整性,一般使用全等操作符
3.6 语句
由于JavaScript中不存在块级作用域,所以循环内部定义的变量在外部也可以访问到
var count =10;
for (var i = 0; i <count ; i++) {
console.log(i);
}alert(i);//i=10
for in:是一个精准的迭代语句,用于枚举对象的属性,但是ECMAscript里面对象的属性是没有顺序的
3.7 函数
ECMAscript函数不介意传进来多少个参数,也不在乎传进来的参数的数据类型是什么
可以使用arguments对象来访问参数数组,从而获得每一个传给函数的参数
function howManyArgument(){
alert(arguments.length);
}
howManyArgument(1,2,"e3",true);//4
arguments对象可以和命名对象一起使用
JavaScript由于没有类似于C和Java一样的函数签名所以不能进行方法重载,如果函数同名则以第二个函数的定义为准