复习-JS(2)

54 阅读4分钟

1.非布尔值与或

对于非布尔值运算会先转化成布尔值,在进行运算,并且返回原变量值

&&与

​ 规则

​ 如果第一个值为true 就必然返回第二个

​ 如果第一个值为false ,就直接返回第一个

​ 哪个错就返回哪个 反之都是对的就返回最后一个

	var a = 1 && 2;  //2
	var a = 2 && 1;		//1
	var a = 0 && 1;		//0
	var a = 'a'&& 0;	//0
	var a = NaN && 0;	//n
	var a = 0 && NaN;	//0
	var a = 1 && 0;//0
	var a = 0 && 1;//0
	var a = undefined && 1; //undefined
	console.log(a);

|| 或;

​ 规则

​ 如果第一个值为true就直接返回第一个值

​ 如果第一个为false 就直接返回第二个值

var b = 1 || 2;
var b = 2 || 1;
var b = 0 || 1;
var b = '' || 1;
var b = 0 || NaN;
console.log(b)

2.代码块

其实这就是一个小知识,以前也忘了,其实就是个{},有什么作用呢 :限定变量的作用域: 我觉得就这一点作用

{
    let localVar = 123;  // 仅在此代码块内可见的局部变量
    // 其他操作
}
console.log(localVar);  // 这里会报错,因为 localVar 超出了作用域

3.优先级

在js中有一个运算优先级的表,在表中优先级越高,越先计算, 在js中如果不知道优先级高级,可以使用括号()来改变的他们的优先级

var c = 1 || 2 && 3;// 1  与的优先级比或大 
var c = (1 || 2) && 3;//3
console.log(c);

image-20231115225432392.png

4.工厂对象

使用工厂的方法创建对象,在函数里传入实参,更改函数里的对象,使用工厂对象可以更加的方便,可以传入更多的参数,更加的灵活运用创建对象,简洁

function(nane,age){
   	// 创建一个对象
	var obj = new Object();
	//添加对象
	obj.name = name,
	obj.age = age,
	obj.han = function(){
				alert(this.name);
				}
    return obj
}
//把函数zao函数里面的对象给 obj2
var obj2 = zao('zhong',18);

5.构造函数

构造函数的作用,可以创建一个新的不同的类,构造函数其实就是普通函数,创建方式和普通函数没有区别,不同的是构造函数习惯首字母要大写(只是习惯而已)

5.1构造函数执行流程

  1. 创建一个新对象:当使用 new 关键字调用一个函数时,JavaScript 引擎会创建一个新的空对象,这个对象将成为最终返回的实例。
  2. 将构造函数与新对象关联:JavaScript 引擎会将新对象的原型(__proto__)指向构造函数的原型对象(即构造函数的 prototype 属性所指向的对象),建立起对象和构造函数之间的关联。
  3. 执行构造函数:通过 new 调用构造函数时,会将新创建的空对象绑定到构造函数中的 this 上下文,从而使构造函数能够操作这个新对象。这意味着构造函数内部的代码可以对新对象进行属性赋值、方法定义等操作。
  4. 返回新对象:如果构造函数没有显式返回其他对象,那么 new 表达式将返回这个新对象;否则,将返回构造函数内部显式返回的对象。

像Date,Object Array String ,这些都是一个构造函数,其实还有一个注意点就是,String Number,我们平常是 直接const a = ‘1’ 直接创建一个字符串,为什么我们可以去调用toString,Value,我都没有 new String()为什么一个普通 字符串还有方法吗,其实这些都是JS在调用方法的时候帮临时封装了为String对象我们 执行,被称为 隐式装箱,这意味着当你尝试调用字符串的方法时,JavaScript 引擎会临时将字符串封装成 String 对象,以便访问该对象上的方法。

const a = '1';
console.log(a.toString()); // 在调用 toString 时,a 字符串会被临时封装成 String 对象,然后调用其 toString 方法

还有需要注意的是,一旦这个操作完成,临时封装的对象会立即被丢弃,因此并不会有太大的额外开销。这种隐式装箱的机制让基本数据类型和对象之间的转换更加灵活,使得 JavaScript 在处理各种数据类型时表现得更为统一。

回到正题 使用同一个构造函数 创建对象,我们称为一类对象,也将构造函数称为一个类,我们将通过一个构造函数创建的对象,称为是类的实例

  // 创建构造函数
function Gou(name,age,sex){
	this.name1 = name;
	this.age1= age;
	this.sex1 = sex;
	this.fun = function(){
				alert('fang');
			   }
               }
var obj = new Gou('zhong',18,'男');
console.log(obj);

可以使用instanceof可以检查一个对象是否一个类的实例

/*

​ 语法

​ 对象 instanceof 构造函数

​ 如果是,则返回true, 否则返回false

​ */