学习记录---JavaScript02--对象 -创建对象-JSON-内置对象Math

函数

:把一些重复的代码封装在一个地方,在需要的时候直接调用这个函数

函数的作用:代码重用
函数的参数:
1.形参:函数定义的时候,函数名字后面的小括号里的变量
2.实参:函数调用的时候,函数名字后面的小括号里的变量或者值

返回值

  • 编程思想

面向过程:凡是都要亲力亲为,每件事的具体过程都要知道,注重的过程
面向对象:根据需求找对象,所有的事都用对象来做,注重的事结果

  • 面向对象特点

:封装、继承、多态
js不是面向对象语言,但是可以模拟面向对象的思想
js是一门基于对象的语言:
万物皆对象
看的见,摸得到,具体特指(高亮!)的某个东西
找对象----->文字描述对象
对象的特征
对象的行为

创建对象的三种方式

  1. 调用系统的构造函数创建对象----------实例化

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();
  1. 自定义构造函数创建对象—自己定义一个构造函数,创建对象

函数和构造函数的区别:名字的首字母是否是大写

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对象返回

内存 --------- 堆栈

变量是直接存在栈中的
栈是划分规矩的
构造函数时存在堆中的,在栈中存放了对象的地址,使用这个对象时就在栈中找到该对象的地址,根据地址在堆中找到改对象指示的构造函数
总的来说对象占了两块空间,堆里面是对象,栈里存储是该对象所在空间的地址

  1. 字面量的方式创建对象

例子

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值