字面量和变量
- 字面量实际上就是一些固定的值,比如 1 2 3 4 true false null NaN “hello”。字面量都是不可以改变的。
- 变量可以用来保存字面量,并且可以保存任意的字面量
数据类型
- js的变量是由JS引擎根据“=”右边的值来判断的,引擎编译完成后就确定了变量的数据类型
- JS 拥有动态类型,意味着相同的变量可用作不同的类型
- 数据类型分为两类:1、基本数据类型; 2、引用数据类型
- 基本数据类型(Number,String,Boolean,Undefind,Null)
简单数据类型 | 说明 | 默认值 |
---|---|---|
Number | 数字型,包括整型和浮点型。 | 0 |
String | 字符串类型。注意,在js里面字符串要带引号 | "" |
Boolean | 布尔值类型,如:true、false,等价于1和0 | false |
Undefined | var = a 。声明了变量a但是没有赋值,此时a=undefined | undefind |
Null | var a = null。声明了变量a为空值 | null |
- Number:
<1、js中八进制前面加0,十六进制前面加0x;
<2、数值的最大值和最小值alert(Number.MAX_VALUE)和alert(Number.MIN_VALUE),
<3、无穷大(Infinity),无穷小(-Infinity),非数值(NaN)
isNaN(变量名)这个方法用来判断非数字,并返回一个值,若为数字则返回false,若为非数字则返回true
- String
<1、字符串长度:变量名.length
<2、字符串拼接:字符串和其他类型相拼接,最终结果是字符串类型
- Boolean
布尔值主要用来进行逻辑判断,布尔值只有两个
true 逻辑的真
false 逻辑的假
使用typeof检查一个布尔值时,会返回"boolean"
- Null 空值
空值专门用来表示为空的对象,Null类型的值只有一个null
使用typeof检查一个Null类型的值时会返回"object"
- Undefined 未定义
如果声明一个变量但是没有为变量赋值此时变量的值就是undefined
。该类型的值只有一个 undefined
使用typeof检查一个Undefined类型的值时,会返回"undefined"
- 引用数据类型(object)
object对象:
对象(Object)
对象是JS中的引用数据类型
对象是一种复合数据类型,在对象中可以保存多个不同数据类型的属性
使用typeof检查一个对象时,会返回object
对象的分类:
< 1、内建对象
- 由ES标准中定义的对象,在任何的ES的实现中都可以使用
- 比如:Math String Number Boolean Function Object…
< 2、宿主对象
- 由JS的运行环境提供的对象,目前来讲主要指由浏览器提供的对象
- 比如 BOM DOM
3.自定义对象
由开发人员自己创建的对象
创建对象:使用new关键字调用的函数是构造函数,构造函数是专门用来创建对象的函数
语法:
var obj = new Object();
console.log(typeof obj); //输出object
<1 、向对象中添加、更新属性
语法:
对象.属性名 = 属性值;
对象[“属性名”] = 属性值; //这种方式能够使用特殊的属性名
对象的属性名没有任何要求,不需要遵守标识符的规范,但是在开发中,尽量按照标识符的要求去写。
属性值也可以任意的数据类型。
< 2、读取对象中的属性
语法:
对象.属性名
对象[“属性名”] //"属性名"可以使字符串常量,也可以是字符串变量。这种方式会更灵活
如果读取一个对象中没有的属性,它不会报错,而是返回一个undefined
< 3 、删除对象中的属性
语法:
delete 对象.属性名
delete 对象["属性名"]
< 4、遍历
使用in检查对象中是否含有指定属性
语法:“属性名” in 对象
如果在对象中含有该属性,则返回true
如果没有则返回false
var obj = {'0':'a','1':'b','2':'c'};
for(var i in obj) {
console.log(i,":",obj[i]);
}
类型转换
- 转换为String
<1 、调用toString()方法
var a = 123;
a = a.toString();
//这个方法不适用于null和undefined,由于这两个类型的数据中没有方法,所以调用toString()时会报错
<2 、调用String()函数
var a = 123;
a = String(a);
//注意:对于Number Boolean String都会调用他们的toString()方法来将其转换为字符串,
对于null值,直接转换为字符串"null"。对于undefined直接转换为字符串"undefined"
<3 、为任意的数据类型 +""
var a = true;
a = a + "";
任意基本数据类型和空字符串拼接都会转换为字符串,原理和调用String函数一样
- 转换为Number
<1 、调用Number()函数
svar s = "123";
s = Number(s);
转换的情况:
字符串 => 数字
如果字符串是一个合法的数字,则直接转换为对应的数字
如果字符串是一个非法的数字,则转换为NaN
如果是一个空串或纯空格的字符串,则转换为0
布尔值 => 数字
true转换为1
false转换为0
空值 => 数字
null转换为0
未定义 => 数字
undefined 转换为NaN
基础语法
- 算数运算符
+ 对两个值进行加法运算并返回结果
- 对两个值进行减法运算并返回结果
* 对两个值进行乘法运算并返回结果
/ 对两个值进行除法运算并返回结果
% 对两个值进行取余运算并返回结果
- 自增
自增可以使变量在原值的基础上自增1
自增使用 ++
自增可以使用 前++(++a)后++(a++)
无论是++a 还是 a++都会立即使原变量自增1
不同的是++a和a++的值是不同的,
++a的值是变量的新值(自增后的值)
a++的值是变量的原值(自增前的值)
- 自减
自减可以使变量在原值的基础上自减1
自减使用--
自减可以使用 前(a)后(a)
无论是a 还是 a都会立即使原变量自减1
不同的是a和a的值是不同的,
--a的值是变量的新值(自减后的值)
a--的值是变量的原值(自减前的值)
- 逻辑运算符
!
非运算可以对一个布尔值进行取反,true变false false变true
当对非布尔值使用!时,会先将其转换为布尔值然后再取反
我们可以利用!来将其他的数据类型转换为布尔值
&&
&&可以对符号两侧的值进行与运算
只有两端的值都为true时,才会返回true。只要有一个false就会返回false。
如果第一个值是false,则不再检查第二个值
对于非布尔值,它会将其转换为布尔值然后做运算,并返回原值
规则:
1.如果第一个值为false,则返回第一个值
2.如果第一个值为true,则返回第二个值
||
||可以对符号两侧的值进行或运算
只有两端都是false时,才会返回false。只要有一个true,就会返回true。
如果第一个值是true,则不再检查第二个值
对于非布尔值,它会将其转换为布尔值然后做运算,并返回原值
规则:
1.如果第一个值为true,则返回第一个值
2.如果第一个值为false,则返回第二个值
- 条件分支语句switch
switch(条件表达式){
case 表达式:
语句...
break;
case 表达式:
语句...
break;
case 表达式:
语句...
break;
default:
语句...
break;
}
执行流程:
switch…case…语句在执行时,会依次将case后的表达式的值和switch后的表达式的值进行全等比较,
如果比较结果为false,则继续向下比较。如果比较结果为true,则从当前case处开始向下执行代码。
如果所有的case判断结果都为false,则从default处开始执行代码。
this
我们每次调用函数时,解析器都会将一个上下文对象(this)作为隐含的参数传递进函数。
使用this来引用上下文对象,根据函数的调用形式不同,this的值也不同。
指向当前对象
this的不同的情况:
1.以函数的形式调用时,this是window
2.以方法的形式调用时,this就是调用方法的对象
3.以构造函数的形式调用时,this就是新创建的对象
4.构造函数
构造函数是专门用来创建对象的函数
一个构造函数我们也可以称为一个类
通过一个构造函数创建的对象,我们称该对象时这个构造函数的实例
通过同一个构造函数创建的对象,我们称为一类对象
构造函数就是一个普通的函数,只是他的调用方式不同,
如果直接调用,它就是一个普通函数
如果使用new来调用,则它就是一个构造函数
例子:
function Person(name , age , gender){
this.name = name;
this.age = age;
this.gender = gender;
this.sayName = function(){
alert(this.name);
};
}
构造函数的执行流程:
1.创建一个新的对象
2.将新的对象作为函数的上下文对象(this)
4.将新建的对象返回
instanceof 用来检查一个对象是否是一个类的实例
语法:对象 instanceof 构造函数
function Person(){
//构造函数Person
}
var per = new Person;
console.log(per instanceof Person) //输出结果true
如果该对象时构造函数的实例,则返回true,否则返回false
Object是所有对象的祖先,所以任何对象和Object做instanceof都会返回true
枚举对象中的属性
for…in
语法:
for(var 属性名 in 对象){
}
for…in语句的循环体会执行多次,对象中有几个属性就会执行几次,
每次讲一个属性名赋值给我们定义的变量,我们可以通过它来获取对象中的属性