JavaScript学习笔记9

本文详细介绍了JavaScript中的对象创建、属性操作、构造函数的使用以及包装类的概念。讲解了`this`关键字在方法中的作用,如何修改和访问对象属性,并通过实例展示了如何使用系统自带和自定义构造函数创建对象。同时,提到了对象字符串、数字和布尔值的包装类,以及它们的属性和方法。最后,文章包含了一些JavaScript练习题,帮助读者巩固理解。
摘要由CSDN通过智能技术生成

一、对象

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注意:undefined是函数的返回值,因为没有设置返回值,所以就是灰色的undefined


改mrDeng.health为this.health,此处this指代的是自己,是第一人称,指的是mrDeng。因为this是在一个方法里面,所以指的是这个方法

smoke : function (){
 console.log(I am good’)
 this.health --;
},



二、属性的增、删、改、查

在这里插入图片描述

=“”等号后面的引号里面需要有值才可以

在这里插入图片描述

删除必须借助 delete mrDeng.sex

在这里插入图片描述

例子:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、对象的创建方法

(1)var obj{}
对象字面量/对象直接量plainObject
(2)构造函数
1.系统自带的构造函数Object()
new Object();
Array();
Number();
Boolean();
Date();

系统自带的构造函数 Object()可以批量生成对象,每一个对象都一样,但是彼此相互独立。

在 Object()前面加个 new,变成 new Object()的执行,就会真正的返回一个对象,通过 return 返回,拿变量接受。

var obj = new Object();


var obj = new Object();
var obj = {};
这样写区别不大
var obj = new Object();
obj.name = ‘abc’;
obj.sex = “male”;

双引号和单引号都是表示的字符串,写双引号也可以写单引号,但是为了跟后端 php配合最好写单引号。

如果要打印一个单个的引号,用正则表达式转义字符
注意等号和冒号的用法

obj.say = function(){}

var obj = { name : ‘abc’}

2、自定义

Object.create(原型)方法

function Person(){}

Person 是可以随便写的,也是构造函数
构造函数跟函数结构上没有任何区别
var person1 = new person();


必须用 new 这个操作符,才能构造出对象

构造函数必须要按照大驼峰式命名规则,但凡是构造函数就要大写,例如 TheFirName

在这里插入图片描述

例子:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

car1 和 car 是长得一样,但是是不同的两个 car。方法名和对象名尽量不一样

a 和 A 变量是两个变量,var car = new Car 里面 car 和 Car 是两个变量

例子:

在这里插入图片描述

这里的 color 可以和上面的重复

通过参数,使函数发生变化,变成自定义

在这里插入图片描述

构造函数内部原理

前提必须要加 new,以下三步都是隐式的:
1.在函数体最前面隐式的加上 var this = {} 空对象
2.执行 this.xxx = xxx;
3.隐式的返回 return this

在这里插入图片描述
在这里插入图片描述

function Person(name, height){
//隐式的 var this = {},下面正常执行 this
 this.name = name;
 this.height = height;
 this.say = funtion (){
 console.log(this.name); 
//此处的 this 和外面的 this 不同
}
// 隐式的 return this;
}
console.log(new Person(‘xiaowang’, 180).name);



例也可以这样显式的写出来
function Person (name, height){
 var that= {}; //显式写出来
 that.name = name;
 that.height = height;
 return that; //显式写出来
}
var person = new Person();



  <script>
        function Person(name, height) {
            this.name = name;
            this.height = height;
            this.say = function() {
                console.log(this.name);
            }
            return {};
        }
        var person = new Person('xiaowang', 180);
        var person1 = new Person('xiaozhang', 175);
        //现在的 peson 和 person1 都是 Object{}
    </script>

在这里插入图片描述


<script>
        function Person(name, height) {
            this.name = name;
            this.height = height;
            this.say = function() {
                console.log(this.name);
            }
            return 123;
        }
        var person = new Person('xiaowang', 180);
        var person1 = new Person('xiaozhang', 175);
    </script>

在这里插入图片描述

如果 return 写成 return 123,会使 return 失效,如上图

x 有 new 了以后就不能返回原始值,例如 123

四、包装类

  • new String();
  • new Boolean();
  • new Number();
var num =123; → 原始值数字

只有原始值数字是原始值,原始值不能有属性和方法

属性和方法只有对象有,包括对象自己,数组,function

在这里插入图片描述

var num = new number 123; 

→ 构造函数。是对象 123,不是原始值数字

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

字符串类型的对象
var num = new Nunber(123); //数字类型对象
var str = new String(‘abcd’); //字符串类型对象
var bol = new Boolean(‘true’);//布尔类型对象

在这里插入图片描述
在这里插入图片描述
对象字符串天生自带length的属性
在这里插入图片描述

undefined和null不可以有属性值

写成undefined.abc=123;会报错


思考下列问题:为什么控制台显示的结果是undefined

var str = 'abcd';
str.abc = 'a';
console.log(str.abc); //undefined
原始值不可能有属性和方法,但经过了包装类(加隐式)可以调用一些属性与方法
var num = 4;
num.len = 3;
//系统隐式的加上 new Number(4).len = 3; 然后 delete,所以不报错
console.log(num.len);
//系统隐式的加上 new Number(4).len; 但是这个 new number 和上面的 new number不是同一个,所以返回 undefined

上面这些隐式的过程就是包装类



		var str = 'abcd';
		str.length = 2;
        //隐式的加上new String('acbd').length=2;delete
        console.log(str);//abcd
        console.log(str.length);//4

五、练习题

在这里插入图片描述

str+=1    //abc1
var test=typeof(str);  //test=="string",返回string,string长度是6
if(test.length==6){
	test.sign="typeof的返回结果可能为String";
	//这是原始值,原始值要赋属性值需要调用包装类,赋了跟没赋值是一样的,new String(test).sign='xxx'
}
console.log(test.sign);
//new String(test).sign
//答案是undefined

在这里插入图片描述

答案 A,里面并没有用参数 被写死了,传参不成功



在这里插入图片描述

这题考的是闭包,答案是 1,2,1

在这里插入图片描述

答案 1,4, 4
同一个函数,后面会覆盖前面的
fn add 会提升到前面
(百度2013笔试题)考了预编译

在这里插入图片描述

例:下面代码中 console.log 的结果是[1, 2, 3, 4, 5]的选项是:
Afunction foo (x){
 console.log(arguments)
 return x
}
foo(1, 2, 3, 4, 5)

Bfunction foo (x){
 console.log(arguments)
 return x
} (1, 2, 3, 4, 5)

C( function foo (x){
 console.log(arguments)
 return x
})(1, 2, 3, 4, 5)

Dfunction foo(){bar .apply (null, arguments);}
function bar (x) {console.log(arguments);}
foo(1, 2, 3, 4, 5);

答案 A, C,D 其中 b 执行不了,但是不报错

bar 里面传了一下参数。
bar.apply (null, arguments);
写成 bar (arguments);
//阿里笔试题
例:请问以下表达式的结果是什么?
parseInt(3, 8)
parseInt(3, 2)
parseInt(3, 0)

答案选 34,值为 3NaN3(有的浏览器遇到 0 是报 NaN
//阿里笔试题
例:以下哪些是 JavaScript 语言 typeof 可能返回的结果:

A.string B.array C.object D.null
//百度笔试题
例:看看下面 alert 的结果是什么?
function b (x, y, a) {
 arguments[ 2 ] = 10;
 alert( a );
}
b(1, 2, 3);

如果函数体改成下面,结果又会是什么?
a = 10alert(arguments[ 2 ]);

答案 1010

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

小于等于 255 是一个字节,
大于是两个字节
返回值大于 255 是中文
右边是两种方法→
Unicode 编码涵盖 asc 码

在这里插入图片描述




阿里巴巴笔试题机试场景 respect!!!
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值