写在前面:因为还没开始工作,可能有的部分有错,希望大家能指点出来,这是我看渡一的视频总结的笔记,所有的示例都来自视频,我算是一个搬运工了吧哈哈哈视频讲的很好,强烈推荐大家去看一看ヾ(◍°∇°◍)ノ゙
一.对象
(基础的变量类型:引用值)
1.对象的创建方法
1.字面量法 var obj = {};
2.构造函数法(可创造多个一样的对象)
(1)系统自带的构造函数
Object(),Number(),Array()
var num = new Number()
(2)自定义
function Person (){}
var person = new Person
//Person是函数,person是对象,函数命名方式遵守大驼峰方法
(3)对象的增删改查
增改查: 对象.属性
删: delete 对象.属性
注:构造函数的结构和函数没有任何区别
示例
/* function Car(color) {
this.color = color;//输入参数,使函数灵动起来
this.name = 'BMW';
this.height = '1400';
this.lang = '4900';
this.weight = 1000;
this.health = 100;
this.run = function () {
this.health --;
}
}
var car = new Car('red');
var car1 = new Car('green');*/
/* //各改各的,两个人
car.run();
car.health;//99
car1.health;//100
*/
构造函数创建的每个对象,互不干扰,只是初始状态长得一样
注:
(1)当一个对象的属性没有时,会打印undefined,不会报错
(2)在内部添加属性 :
在外部添加属性 =
2.构造函数内部原理
1.在函数体最前面隐式的加上this={}
2.执行this.xxx = xxx;
3.隐式的返回this
(有new才执行这三步!!)
有new就不可能返回原始值,会自动忽略掉原始值
示例
function Student(name,age,sex) {
/*
1.var this ={
2.往this空对象里传入属性
Student的AO{this:{name:'传入的参数'}}...
name :''
age :''
sex :''
};
*/
this.name = name;
this.age = age;
this.sex = sex;
this.grade = 2017;
// 3.return this;
}
var student = new Student('zhangsan',18);
//有了new就能把 函数->构造函数
二.包装类
1.原始值是不能有属性和方法的
只有对象才有属性方法
对象有(obj,function,array)
2.不是所有数字都是原始值
var num = new Number(123)
数字的对象能参与运算,但是运算之后会回归为数(原始值)?未验证
字符串,布尔类型也同上
3.原始值是不能有属性和方法的,但是有了包装类就可以调用了
4.包装类使用方法:
将用new的方式给原始值添加属性,最后删除添加的结果
自定义的属性:原始值.属性 返回undefined
系统自带属性:原始值.属性 正常返回结果
例1.
var num = new Number(123);
可随意添加属性,也可参与运算
undefined和null都不能设置属性
例2.
var num1 = 4;
num1.len = 3;
//①new Number(num).len = 3;新建一个数字对象,让数字对象的len=3; 把结果扔掉 delete
//②new Number(num).len,查看,已经删除了,不存在了
console.log(num1.len);//undefined
①②是两个不同的对象
例3.
//数组本身就有截断属性
var str = 'abcd';
str.length = 2;
//new String('abcd').length = 2; delete//销毁的是新建的东西,没有销毁str的东西
//str没有length截断属性
console.log(str);//abcd
//new String ('abcd').length,这是系统自带的属性,不会销毁
console.log(str.length)//4
例4.
var str = 'abc';
str += 1;//str = abc1
var test = typeof (str);//test == 'string'
if(test.length == 6){
//new String('abc').sign='typeof的返回值可能为String' 然后delete
test.sign = 'typeof的返回值可能为String';
}
//new String('abc').sign
console.log(test.sign);//undefined
原始值赋属性值的话,要调用包装类,相当于赋了跟没赋一样