1、基本数据类型
String Number Boolean Null Undefined
2、引用数据类型
Object
3、
- JS中的变量都是保存在栈内存中的,基本数据类型的值直接在栈内存中存储,值与值之间时独立存在的,修改一个值不会影响其他的变量
- 而对象是保存在堆内存中的,每创建一个新的对象,就会在堆内存中开辟出一个新的空间,而变量保存的是对象的内存地址(对象的引用),如果两个变量保存的是同一个对象引用,当一个通过一个变量修改属性时,另一个也会受到影响
- 当比较两个基本数据类型的值时,就是比较值。而比较两个引用数据类型时,它比较的是对象的内存的地址,如果两个对象是一模一样的,但是地址不同,它也会返回false
1、使用对象字面量创建一个对象
- 使用对象字面量,可以在创建对象时直接指定对象中的属性
- 语法:{属性名 :属性值,属性名:属性值…}
- 对象字面量的属性名可以加引号也可以不加,建议不加,如果使用特殊的名字,必须要加引号。
- 属性值和属性名是一组一组的名值对结构,名和值之间使用冒号连接,多个名值之间使用逗号隔开,如果一个属性之后没有其他属性了,就不要写逗号。
var obj2 = {name:"猪八戒",
age:18//无逗号
};
- 函数也是一个对象
- 函数中可以封装一些功能,在需要的时候可以执行这些功能(代码)
- 函数中可以保存一些代码在需要的时候用
- 使用typeof检查一个函数对象时,会返回function
1、使用函数声明来创建一个函数
function fun(){
alert("坏蛋");}
fun();//调用函数
2、使用函数表达式创建一个函数
语法:var 函数名 = function([形参1,形参2…形参n])
var fun2 = function(){
alert("代码");
}
fun2();
3、定义一个用来求两个数和的函数
function sum(a,b){
console.log(a+b);
}
sum(2,5);
4、创建一个函数,用来计算三个数的和,可以使用return来设置函数的返回值
- 语法:return 值
- return后的值将会作为函数的执行结果返回,可以定义一个变量,来接收该结果
- 在函数中return后的语句都不会执行,使用return可以结束整个函数
- 如果return语句后不跟任何值就相当于返回一个undefined,如果函数中不写return,则也会返回undefined
- return后可以跟任何类型的值
function sum(a,b,c){
var d =a + b + c;
return d;}
var result = sum(5,2,3);
5、创建一个函数,可以在控制台中输出一个人的信息
function person(o){
console.log("我是"+o.name+",今年我"+o.age+"岁了");
}
var obj = {
name:"悟空",
age:"18"
};
person(obj);
6、实参可以是一个对象,也可以是一个函数
7、有括号和无括号的区别
fun()
调用函数
相当于使用函数的返回值
fun
函数对象
相当于直接使用对象
8、将函数对象使用return返回
var obj = {name:"孙悟空",
age:18};
for(var n in obj){
console.log("属性名"+ n);
console.log("属性值"+ obj[n]);
}
(function(){ alert("wo");
})();
作用域指一个变量的作用的范围
在JS中一共有两个作用域
直接编写在script标签中的JS代码,都在全局作用域中
全局作用域在页面打开时创建,在页面关闭时销毁
在全局作用域中有一个全局对象window,它代表的是一个浏览器的窗口,它由浏览器创建,我们可以直接使用
在全局作用域中:
(1)创建的变量都会作为window对象的属性保存
(2)创建的函数都会作为window对象的方法保存
全局作用域中的变量都是全局变量,在页面任意部分都可以访问的到
调用函数时创建的函数作用域,函数执行完毕以后,函数作用域销毁
每调用一次函数就会创建一个新的函数作用域,他们之间是互相独立的
在函数作用域中可以访问到全局作用域的变量,在全局作用域中无法访问到函数作用域的变量
当在函数作用域操作一个变量时,它会先在自身作用域寻找,如果有就直接使用; 如果没有则向上一级作用域寻找,直到找到全局作用域; 如果全局作用域中依然没有找到,则会报错ReferenceError
在函数作用域也有声明提前的特性,使用var关键字声明的变量,会在函数中所有代码执行前被声明; 函数声明也会在函数中所有的代码执行前执行
在函数中,不使用var声明的变量都会成为全局变量