函数
:把一些重复的代码封装在一个地方,在需要的时候直接调用这个函数
函数的作用:代码重用
函数的参数:
1.形参:函数定义的时候,函数名字后面的小括号里的变量
2.实参:函数调用的时候,函数名字后面的小括号里的变量或者值
返回值
- 编程思想
面向过程:凡是都要亲力亲为,每件事的具体过程都要知道,注重的过程
面向对象:根据需求找对象,所有的事都用对象来做,注重的事结果
- 面向对象特点
:封装、继承、多态
js不是面向对象语言,但是可以模拟面向对象的思想
js是一门基于对象的语言:
万物皆对象
看的见,摸得到,具体特指(高亮!)的某个东西
找对象----->文字描述对象
对象的特征
对象的行为
创建对象的三种方式
- 调用系统的构造函数创建对象----------实例化
var 变量名 = new Object();----Object 是系统构造函数 ----函数首字母为大写
添加属性-----对象.名字=值
例子
变量名.name=""xx---->点语法
添加方法-------对象.名字=函数
例子
变量名.eat = function() {
console.log(“吃吃吃”)
}
调用-----变量名.属性名/方法名()
注:object是对象类型
获取变量(对象)是不是属于此类型
语法:
变量 instanceof 类型的名字------->布尔类型,true就是这种类型,false不是这种类型
在当前的对象中,可以使用this关键字代表当前对象
y一次性创建多个对象—封装函数
- 工厂模式创建对象
例子
function createObject(name,age) {
var obj = new Object();
obj.name = name;
obj.age = age;
obj.hi = function () {
console.log("我是"+this.name+"我叫"+this.age);
}
return obj;
}
var obj=createObject();
obj.hi();
- 自定义构造函数创建对象—自己定义一个构造函数,创建对象
函数和构造函数的区别:名字的首字母是否是大写
function Person (name,age) {
this.name = name;
this.age = age;
this.sayhi=function() {
console.log("我叫:"+name+"今年"+age);
}
}
var xiaohong=new Person();
xiaohong();
自定义构造函数做的事(new Person();做的事)
1.在内存中开辟(申请一块空闲的空间)空间,存储创建的新对象
2.把this设置为当前对象
3.设置对象的属性和方法的值
4.把这个this对象返回
内存 --------- 堆栈
变量是直接存在栈中的
栈是划分规矩的
构造函数时存在堆中的,在栈中存放了对象的地址,使用这个对象时就在栈中找到该对象的地址,根据地址在堆中找到改对象指示的构造函数
总的来说对象占了两块空间,堆里面是对象,栈里存储是该对象所在空间的地址
- 字面量的方式创建对象
例子
var obj ={};//空对象
obj.name="";
优化后的写法
var obj2={
name:"",//这里是逗号
age:18,
sayhi:function () {
console.log("我是"+this.name);
}
}
注:
js
是一门解释性的语言
是一门脚本语言
是一门弱类型语言,声明都用var
是一门基于对象的语言
是一门动态类型的语言:
1.代码(变量)只有执行到这个位置的时候,才知道变量中到底存储了什么如果是对象,就有了对象的属性和方法,如果是变量,就是变量的作用
2.对象没有什么,只要点了,她通过点语法,那么久可以为对象添加属性
补充 构造函数**.**了不能创建
对象总结
1.字面量创建对象的缺陷:一次性的对象
设置和获取属性的其他方法
var obj = new Object();
obj.name;==
obj[“name”]-------有引号不要忘记
JSON
js对象标记,是一种轻量级的数据交换格式 Javascript Object Notation
JSON格式的数据:一般都是成对的,是键值对
对象:有属性有方法,特质的某个事物
对象:一组无序属性的集合的键值对,属性的值可以是任意类型
JSON也是一个对象,一般json格式的数据无论是键还是值都是双引号括起来的
json的数据实际上就是格式化后的一组字符串的数据,主要是为了方便传值
遍历对象是不能通过for循环遍历的
例子
json数据类型
var json={
"name" : "小明",
"age" : "10",
"sex" : "男"
};
var key="name";
console.log(json[key]);//这个可以获取到json中的name属性名后的值
//输出---------小明
var key="weight";
console.log(json[key]);//js是一门动态类型的语言,虽然里面么有weight属性,但是获取对象时点语法只要写了就定义了(添加了)
//输出--------undefind
拓展:
通过bealoon获取男女性别
var sex=false;
console.log(sex?“男”:“女”);
console.log(json[“name”,“age”]);---------输出10(即age的值)
在json索引中可以这么写,不报错,但是和我们想要的结果不同
Json不能通过for循环遍历,但是可以通过for-in循环遍历
for(var key in json){
console.log(key);-----key—JSON对象中属性的名字
console.log(json.key);-----key是一个变量,这样写是表示通过点语法给json添加了key的属性,这样显示为undefined
console.log(json[key]);
}
对象中确实有这个属性 调用—属性对象.属性名字 或者对象[属性名字];
若只是通过forin遍历json中的值,应该使用对象[属性名字];
简单数据类型和复杂数据类型
原始数据类型: number string boolean undefined null object
基本类型(简单类型)值类型: number string boolean
复杂类型(引用类型):object
空类型: undefined null
值类型的值在栈中存储
引用类型:对象在堆中存储,地址在栈中存储(地址指向堆中的位置
var num=10;
var num2=num;//传递的是值
function f1(x) {
x=100;
}
var num=10;
f1(num);
console.log(num);
//输出结果为10
值类型之间传递,传递的都是值
函数传的实参都是值, 引用类型传递的是地址
var obj={
name:"xiaoming";
}
function f2(obj2) {
obj2.name="xiaohong";
}
console.log(obj.name);//xiaoming
f2(obj);//引用类型传递的是地址,直接进入obj中将其name的值改变了
console.log(obj.name);//xiaohonng
值类型作为函数的参数,传递的是值
引用类型作为函数的参数,传递的是地址
例子
function Person(name,age,salary) {
this.name = name;
this.age = age;
this.salary = salary;
}
function f1(person) {
person.name = "ls";
person = new Person("aa",18,10);
}
var p = new Person("zs",18,1000);
console.log(p.name);
f1(p);
console.log(p.name);
内置对象—js自带的对象
自定义对象----自己定义的构造函数创建的对象
浏览器对象—BOM
内置对象
Math
不需要new
它是一个对象,不是一个函数
Math不是一个构造函数,Math中所有的属性和方法都是静态的、
实例对象:通过构造函数创建出来,实例化的对象
静态对象:不需要创建,直接就是一个对象
静态方法直接通过这个对象名字调用
实例方法必须通过实例对象调用
- Math.PI
- Math.E 常数的底数
- Math.abs() 绝对值
- console.log(Math.abs(’-1’));----1
console.log(Math.abs(’-2’));----2
console.log(Math.abs(null));-----0
console.log(Math.abs(“strig”));----NaN - Math.ceil() 向上取整
console.log(Math.ceil(.95));----1
console.log(Math.ceil(-2.01));----2
console.log(Math.ceil(-0.95));-----0 - Math.floor() 向下取整
- Math.round() 四舍五入
- Math.round(-1.5) -----1 .5特殊,往大了取
- Math.max() 一组数字的最大值
- Math.pow(x,n) x的n次方
- Math.sqrt() 平方根
- Math.random() (伪)随机数[0-1) 取不到1
随机数的写法
function getRandom(min,max) {
return Math.floor(Math.random()*(max-min +1))+min;
}
求0-100之间的随机数
(Math.random()*100)+1
通过MDN查Math的用处
Date
String
Array