2022/2/22

本文探讨了JavaScript中构造函数的实例化过程,包括return值的影响,包装类的属性与方法,以及数组截断现象。重点讲解了原始值与对象的区别,包装类的工作机制,以及数组操作技巧,适合深入理解基础概念。
摘要由CSDN通过智能技术生成


# 一、JavaScript

1、构造函数及实例化原理

1.1故意return一个非this的

function Car(){
    this.color=color;
    this.brand=brand;
      return 123
    return 'abc'
    //return this
}
var car = new Car();
console.log(car.color)//red

当返回一个空对象

function Car(color, brand){
    this.color=color;
    this.brand=brand;
    
    return {};
}
var car = new Car('red','banz');
console.log(car.color)//undefined
console.log(car)//空对象 {}

返回一个空数组

function Car(color, brand) {
  this.color = color
  this.brand = brand

  return []
}
var car = new Car('red', 'banz')
console.log(car.color) //undefined
console.log(car) //空数组 []

返回一个函数

function Car(color, brand) {
  this.color = color
  this.brand = brand

  return function(){}
}
var car = new Car('red', 'banz')
console.log(car.color) //undefined
console.log(car) //f(){}

总结:构造函数当中,return是引用值(函数 对 象 数组)是有用的。原始值(数字,字符等)是没有用的

function Car(color, brand) {
  this.color = color
  this.brand = brand

  return function(){
      cosole.log(1)
  }
}
var car = new Car('red', 'banz')
console.log(car.color) //undefined
car()//1

老师说:JavaScript难在基础

2、包装类

2.1是否有属性和方法

var a =1;
var b= 'abc'
a.len =3
b.add='bcd'
a.reduce = function(){}

2.2原始值并没有自己的方法和属性。

var a = 1
console.log(a)
var b = new Number(a)//实例化一个内置对象
console.log(b)

image-20220222162259825

var a = 1
var b = new Number(a)//实例化的对象数字
b.len = 1
b.add = function () {
  console.log(2)
}
console.log(b)

image-20220222162706703

2.3一个对象加上一个数字,也能参与运算

var a = 1
//console.log(a)
var b = new Number(a)

b.len = 1
b.add = function () {
  console.log(2)
}
var d = b + 1
console.log(d)//2

var a =1;
var aa =new Number(1);
aa.name='aa'
console.log(aa)

image-20220222163514879

2.4转化成为数字对象new Number (),字符串对象(),布尔对象()

var a = 'abc'
var aa = new String(a)
aa.name='aa'
console.log(aa)
var bb = aa + 'bcd'
console.log(bb)

image-20220222173528187

2.5 undefined

var test= new Number(undefined)
console.log(test)//Number:NaN
var test2 =new String(undefined)
console.log(test2)//String:'undefined'

2.6 null

var test= new Number(null)
console.log(test)//Number:0
var test2= new string(undefined)
console.log(test2)//String:'null'

undefined和null是不可以设置任何属性和方法的

console.log(null.length)//报错
console.log(undefined.length)//报错

2.7 思考原始值的方法和属性

//js的包装类
//首先,他看到你是个原始值,然后看到你加了属性,认为你不对。 
//但是你是客户,你是老大,我尽量满足你。让你从没有属性变有属性
//让你有属性的前提是,让你变成对象。

var a = 123
a.length = 3
//new Number(123).length=3; 我给你赋值了,但是我又保存不了你(我不可能自己声明一个变量给你保存),有没没保存,我又赋值了(我的工作)。那我就delete删掉你的属性,就不存在了。
console.log(a.length)//undefiend
var obj =3;
var obj.name='123'
//new Number(obj).name='123'  //delete
console.log(obj.name)//undefined

包装类过程:

var obj={
    
    name:'123'
}
console.log(obj)
delete obj.name
console.log(obj)

想一个办法把它保存起来

var a =new Number(123)//因为它已经是个对象了
a.len=3;
console.log(a.len)//3

思考:为啥str.length可以打印

//系统内部做了一个工作
//str -> length
//new String(str).length 
//console.log(new String(str).length)
//不需要保存,千万不要说字符串有length的属性,而是中间经过了一层包装类
var str = 'abc'
console.log(str.length)//3
  console.log(new Number())
    console.log(new String())

image-20220222232701664

3、数组

3.1数组截断

var arr = [1, 2, 3, 4, 5]
arr.length = 3
console.log(arr)//[1,2,3]

赋值超过长度时候

var arr = [1, 2, 3, 4, 5]
arr.length = 6
console.log(arr)

image-20220222225100511

思考string是否能截断

var str = 'abc'
str.length = 1
console.log(str)//abc
console.log(str.length)//3
var str1 = 'abcd'
//实际访问的是new String(str1).length 
console.log(str1.length) //4

笔试题目:

字符串的length只是一个只读属性

var nam = 'sz'
nam += 10//sz10

var type = typeof nam//'string'
if (type.length === 6) {  //true
  type.text = 'string'  //new String(type).text ='string'没地方保存,delete
}
console.log(type.text)//undefined

注意:

name虽然不是关键字也不是保留字,但它是属性,不能作为变量名,类似的有toplocationself,但leftbottom却可以,原因是这些变量名是JS的主机变量,永远不能被重新声明

思考:怎么样输出string

var nam = 'sz'
nam += 10

var type = new String(typeof nam)//type变成对象了,就可以加属性值
if (type.length === 6) {
  type.text = 'string'
}
console.log(type.text)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值