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