一、静态属性和静态方法
1、静态属性静态方法
在属性和方法前加上static,创建属于类自己的属性和方法
class Person {
// 加static,属于类自己的
static name = "xc"; // 类的name属性
static height = 183; // 类的height属性
static age = 20; // 类的age属性
static sayName() { // 类的sayName方法
console.log(this.name)
}
static sayHeight() { // 类的sayHeight方法
console.log(this.height)
}
// 不加static,属于类创建的对象的
name = "jack"; // 调用类创建的对象里面的属性
height = 165; // 调用类创建的对象里面的属性
sayName() { // 调用类创建的对象里面的方法
console.log(this.name)
}
sayHeight() { // 调用类创建的对象里面的方法
console.log(this.height)
}
}
Person.sayName(); // xc
Person.sayHeight(); // 183
new Person().sayName(); // jack
new Person().sayHeight(); // 165
2、继承静态属性静态方法
本质为原型继承,将Admin的原型设置为Person
使用方法:class Admin extends Person { }; 类Admin现在可以调用Person里面的方法了
class Person {
static uname = "xc";
static age = 20;
static sayName() {
console.log(this.uname)
}
username = "jack";
sayName() {
console.log(this.username)
}
}
class Admin extends Person { };
console.log(Admin.age); // 20
Admin.sayName(); // xc
二、类检查
三种检测数据类型的方法
第一种:typeof
以字符串的形式返回数据类型
优点:简单快捷
缺点:只能检测除null外的基本数据类型和function
第二种:instanceof
判断某个对象是否属于一种引用数据类型,返回布尔类型
例: console.log([1, 2, 3] instanceof Array); // true
优点:可以判断出复杂的引用数据类型
缺点:不能检测基本数据类型
第三种:Object.prototype.toString.call()
console.log(Object.prototype.toString.call(100)) ; // [ object Number ]
优点:能检测出所有数据类型
缺点:IE6下,undefined和null均为Object
三、错误处理
1、try....catch....
try
{
// 代码...
}
catch
(
err)
{
// 错误捕获
}
如果 try 中的代码块出错,停止执行try中的代码,仍然继续执行 catch 中的及后面的代码块
仅对运行时的 error 有效,语法错误无效
try {
console.log(ad);
say();
console.log("....");
} catch (error) { // 错误信息被存在了变量“error”中
console.dir(error);
console.log(error.name);
console.log(error.message);
console.log(error.stack);
}
name
Error 名称。例如,对于一个未定义的变量,名称是 "ReferenceError"
。
message
关于 error 的详细文字描述。
还有其他非标准的属性在大多数环境中可用。其中被最广泛使用和支持的是:
stack
当前的调用栈:用于调试目的的一个字符串,其中包含有关导致 error 的嵌套调用序列的信息。
throw :
// Throw 任意位置中断当前代码执行,抛出错误信息
console.log(1)
console.log(2)
// throw 后面必须是new Error()构建的对象,里面有 name:""; message:""; stack:"":
throw new Error("message hello");
console.log(3)
console.log(4)
try。。。catch。。和throw结合,自定义什么时候报错,且报错信息是什么
let age;
try { // 使用try缩小报错影响范围
age = prompt("age?")
if (+age > 0 && age < 130) {
console.log(age + "岁");
} else {
throw new Error("error age");
}
console.log("Right age"); // age是否正确决定这行是否执行
} catch (error) {
console.log(error)
}
try后面有个finally代码,一定会执行
// try...catch(error)...finally...
try {
throw new Error();
} catch (error) {
console.log(error); // try中报错时执行
} finally {
console.log("finally"); // 一定会执行,不管是否报错
}
全局catch
定义在开头,程序有错误时调用,停止执行当前程序
window.onerror = function (message, url, line, col, error) {
console.log("hello");
console.dir(error)
};
throw new Error("error");
console.log("1");
console.log("1");
2、自定义Error,扩展Error
使用类继承和,自定义什么时候报错,且报错信息是什么,我们可以语义化错误,设置不同的情景错误
// 自定义Error,设置不同的情景错误,都继承于Error
class ageError extends Error {
name = "ageError";
};
class phoneError extends Error {
name = "phoneError";
};
class emailError extends Error {
name = "emailError";
};
try {
// throw new ageError("年龄错误");
// throw new phoneError("手机号码错误");
throw new emailError("邮箱号码错误")
} catch (error) {
console.log(error.name);
console.log(error.message);
}