JS篇:比较详细的JS知识点--01

1、JS声明变量
var:

var 是 ES5 中引入的声明变量的关键字。
它具有函数作用域,即变量的作用域限定在声明它的函数内部或全局作用域中。
var 声明的变量可以被重新赋值,并且可以在声明之前使用(变量提升)。
如果在同一作用域内重复使用 var 声明同一个变量名,变量会被覆盖。

let:

let 是 ES6(ECMAScript 2015)中引入的块级作用域的声明变量的关键字。
它具有块级作用域,即变量的作用域限定在声明它的块(通常是由花括号 {} 包围的代码块)中。
let 声明的变量可以被重新赋值,但不能在同一作用域内重复声明同一个变量名。
不同于 var,let 不会进行变量提升,所以在声明之前使用 let 声明的变量会导致引用错误。

const:

const 也是 ES6 中引入的块级作用域的声明变量的关键字。
它用于声明常量,即一旦赋值后就不能再更改的变量。
const 具有块级作用域,类似于 let。
const 声明的变量必须在声明时进行初始化,且不能再次赋值给其它值。
对于复杂类型的数据(例如对象和数组),const 并不冻结该数据的内容,只是保证变量本身不会被重新赋值。
2、变量初始化是变量声明并赋值
var age = 22;
let name = prompt("请输入你的名字")
alert("你的名字是:" + name);

prompt():是 JavaScript 中的一个内置函数,用于在浏览器中显示一个对话框,让用户输入文本内容。
alert:是 JavaScript 的一个内置函数,用于在浏览器中显示一个简单的对话框,用于向用户显示一条消息。
3、变量的命名规范
1、由字母(A-Z a-z)、数值(0-9)、下划线_、美元符号$ 组成
2、严格区分大小写
3、不能以数字开头
4、不能是关键字、保留字
5、变量命名必须有意义
6、遵守驼峰命名法,首字母小写,后面单词的首字母需要大写

7、推荐翻译网站 :有道、爱词霸

以上总结练习:

// 练习:交换两个变量的内容(步骤和java语言中的交换变量内容一样)
        var add1 = 123;
        var add2 = 234;
        console.log('第一个内容是' + add1 + '\n' + '第二个内容' + add2)
        var temp;
        temp = add1;
        add1 = add2;
        add2 = temp;
        console.log('第一个内容是' + add1 + '\n' + '第二个内容' + add2)

/* 小结:
        1、为什么需要变量?因为需要存储数据 
        2、变量是什么?变量是存储数据的容器
        3、变量的本质是什么?变量的本质是申请空间,存储数据
        4、变量是怎么使用的?使用变量时,声明变量并变量赋值(简称初始化)
        5、什么是变量的初始化?声明变量的同时对变量进行赋值
        6、变量命名规范有哪些?
            (1、由字母(A-Z a-z)、数值(0-9)、下划线_、美元符号$ 组成
              2、严格区分大小写
              3、不能以数字开头
              4、不能是关键字、保留字
              5、变量命名必须有意义
              6、遵守驼峰命名法,首字母小写,后面单词的首字母需要大写)
        7、交换变量的思路?和java语言交换两个变量的内容一样*/
4、JS三种与用户交互和输出信息
/*  JS三种与用户交互和输出信息:
         方法                说明                            归属
         alert(msg)          浏览器弹出警示框                 浏览器
         console.log(msg)    浏览器控制台打印输出信息          浏览器
         prompt(msg)         浏览器弹出输入框,用户可以输入     浏览器*/

prompt("请输入你的年龄:")
alert("我是计算机指令")
console.log("我是程序员才能看的内容!")

上面三个都是浏览器提供的特定功能和API。它们用于与用户交互和输出信息,帮助开发者在开发过程中进行调试、记录日志和与用户进行简单的交互。

console函数:

console.log():用于在控制台输出普通信息。可以接受一个或多个参数,并将它们打印到控制台中。

console.log('Hello, World!');
console.log('The answer is', 42);

console.error():用于输出错误信息。与 console.log() 类似,但会将信息标记为错误,并以不同的样式显示。

console.error('Something went wrong!');

console.warn():用于输出警告信息。类似于 console.log(),但会将信息标记为警告,并以不同的样式显示。

console.warn('This action is not recommended!');

console.info():用于输出一般的信息。类似于 console.log(),但会将信息标记为信息类别,并以不同的样式显示。

console.info('This is an informational message.');

console.debug():用于输出调试信息。与 console.log() 类似,但会将信息标记为调试信息,并以不同的样式显示。通常在调试代码时使用。

console.debug('Debugging information');
5、JS声明变量的特殊情况
情况说明结果

var age;

console.log(age)

只声明不赋值undefined或者空白内容
console.log(age)不声明不赋值,直接使用报错(JS是从上到下一行一行解析的,如果上一行报错,下面就不会执行,除非自己解决)

age=10; 

console.log(age)

不声明只赋值正常使用(这种情况是声明一个var变量,但是语法格式不提倡使用)
代码练习:

// 1、只声明不赋值,结果显示underlined
      var name;
      console.log(name ? name : "name变量输出值:undefined");
// 2、不声明不赋值,直接使用,结果报错
      try {
        console.log("这时try部分");
        console.log("age变量输出值:" + age);
      } catch (error) {
        console.log(error);
      }
      // 报错的语句如果不加修改的话,其位置后面的js语句是不会被执行的,所以这里使用try...catch...
// 3、不声明只赋值,结果正常显示
      address = "广州";
      console.log("address变量输出值:" + address);

6、JS常见的几种数据类型(ES6多了Symbol数据类型、ES10多了bigInt数据类型)

简单数据类型:Undefined、Null、Boolean、Number、String

复杂数据类型:Object

简单数据类型说明默认值
Number

数字型,包含整型数值和浮点型数值

0
Boolean

布尔值类型,如true  false  可以对应等价成1和0

false
String

字符串类型,内容都需要带引号

""  ''

Undefined

var a; 声明了变量a但是没有给值

undefined

Null

var a=null; 声明了变量a为空值。

null

扩展:

null 是一个特殊的关键字,表示一个空值或者不存在的对象。当你将一个变量赋值为 null 时,它会被认为是一个空值。空值不占用内存空间,赋值为 null 的变量会释放其之前所引用的对象,从而允许垃圾回收器回收相应的内存。

 undefined 是一个表示未定义值的特殊关键字。当一个变量声明但未赋值时,默认的初始值就是 undefined。未定义的变量会占用内存空间,但它的值为 undefined,表示该变量没有被赋予有效的值。

代码练习:

// 1、数字型变量
      var age = 18;
      console.log(age);
// 2、布尔值类型
      var bool = true;
      console.log(bool);
// 3、字符串类型
      var add = "北京123";
      console.log(add);
// 4、underfined
      var age1;
      console.log(age1);
// 5、null
      var add1 = null;
      console.log(add1);

// js中数值的最大值和最小值
      console.log("最大值:" + Number.MAX_VALUE);
      console.log("最小值:" + Number.MIN_VALUE);

// 计算机数字型的三种特殊值
      console.log("无穷大:" + Number.MAX_VALUE * 2);
      console.log("无穷小:" + Number.MAX_VALUE * -2);
// 输出NaN
      console.log("你好啊" * 2);
// 判断一个数值是否为NaN,可以使用 isNaN(内容) 

注意:上面乘以2不是固定写法,因为Number.MAX_VALUE已经是最大了,
      总的只要乘以一个比1大的数,就可以得到无穷

Infinity 代表无穷大,大于任何数值
-Infinity 代表无穷小,小于任何数值
NaN ,Not a Number 代表一个非数值
7、Boolean、Undefined、Null
boolean布尔数据类型中:
true表示正确,或表示数值中的1
false表示不正确,或数值中的0,其中的1和0 可以参与数学运算

undefined和null
null表示空值
underfined和null与字符串相连的时候可看成是字符串,并与其他的字符串进行相连
如果是进行数学运算,underfined+1结果是NaN,而null+1结果表示1,因为null为空值
代码练习:

console.log(true);
console.log(false);
console.log(true + 1);
console.log(false + 1);

console.log("~~~~~~~~~~~")

console.log(undefined);
console.log(undefined + "与字符串相连转化为字符串");
console.log(undefined + 1);

console.log("~~~~~~~~~~~")

console.log(null + "与字符串相连转化为字符串");
console.log(null + 1);//此时的null表示空,结果是1

8、字符串的length属性
代码练习:

var info = "我是一名程序员";
console.log(info.length);

9、数据类型转换
什么是数据类型转换?
使用表单、prompt获取过来的数据默认是字符串类型的数据,此时就不能直接简单的进行加法运算,
而需要转换变量的数据类型,简单的就是把一种数据类型的变量转换为另外一种数据类型
 1)、转换为字符串
方式说明案例
toString()转换成字符串

var num = 1;

console.log(num.toString())

String()转换成字符串

var num = 1;

console.log(String(num));

加号拼接字符串和字符串拼接的结果都是字符串,使用加号的拼接方也称为是隐式转换方法

var num = 1;

console.log("世界第"+num)

备注:使用字符串的concat()也是可以拼接的,"".concat(目标数值) 这样也可以转换。

2)、转换为数字型(重点)
方式说明案例
parseInt(string)函数将string类型的数据转换成整数类型

var num = "78";
console.log(parseInt(num))

parseFloat(string)函数将string类型转换成浮点数数值型

var num = "78.12";

console.log(parseFloat(num))

Number(string)强制类型转换将string类型转换成数值型

var num = "12"或者是"12.22";

console.log(Number(num));

JS隐式转换利用算数运算隐式转换成数值型

var num = "12";

console.log(num-0);

注意:parseInt和parseFloat单词的大小写,这两个是重点。隐式转换是我们进行算术运算的时候,JS自动转换数据类型的方式。

代码练习:

// 1、将其他数类型转换为字符串类型
      console.log(String(12));
      console.log(typeof String(12));
      var age = 18;
      console.log(age.toString());
      console.log(typeof age.toString());
      console.log("" + 12 + 12);
      console.log(typeof ("" + 12 + 12));
      console.log(true.toString());
      console.log(typeof true.toString());
      try {
        console.log(undefined.toString()); //不能转换成字符串类型;
      } catch (error) {
        console.log(error);
      }
      try {
        console.log(typeof undefined.toString());
      } catch (error) {
        console.log(error);
      }
      try {
        console.log(null.toString()); //不能转换成字符串类型;
      } catch (error) {
        console.log(error);
      }
      try {
        console.log(typeof null.toString());
      } catch (error) {
        console.log(error);
      }

代码练习:

// 2、将字符串类型转换为数值类型(数值类型有整数类型和浮点数类型)

      console.log(parseInt("123"));
      console.log(parseInt("123.123"));
      console.log(parseFloat("123"));
      console.log(parseFloat("123.123"));
      console.log(Number("12"));
      console.log(Number("12.12"));

      console.log(parseInt(true)); //NaN
      var add = "北京123";
      console.log(parseInt(add)); //NaN

代码案例:

// 案例:弹出输入框,输入年龄之后计算出我们现在几岁再返回对话框
      alert(
        "你今年是" +
          (new Date().getFullYear() -
            parseInt(prompt("请输入你出生的年份:"))) +
          "岁"
      );


// 案例2:提示用户在第一个输入框中输入第一个值,然后再在第二个输入框中输入第二个值,最后计算出结果并从对话框中显示
      alert(
        "结果是:" +
          (Number(prompt("请输入第一个值")) + Number(prompt("请输入第二个值")))
      );
 3)、布尔数类型的转换
// boolean()函数,其他类型转换成布尔数据类型,boolean("123")
// 代表空、否定的值会被转换为false,如''、0、NaN、null、undefined
// 其余值都会转换为true
      console.log(Boolean(""));
      console.log(Boolean(0));
      console.log(Boolean(NaN));
      console.log(Boolean(null));
      console.log(Boolean(undefined));
      console.log(Boolean("小白"));
      console.log(Boolean("1213"));
      console.log(Boolean(123));

 10、逻辑中断
短路运算(逻辑中断)
短路运算的原理:当有多个表达式(值)时,左边的表达式值可以确定结果时,就不再继续右边的表达式的值

        1、逻辑与
        语法:表达式1&&表达式2
        如果第一个表达式的值是真,则返回表达式2的值
        如果第二个表达式的值是假,则返回表达式1的值

        2、逻辑或
        语法:表达式1||表达式2
        如果第一个表达式的值为真,则返回表达式1
        如果第一个表达式的值为假,则返回表达式2
代码练习:

console.log(123 && 234);//234
console.log(0 && 234);//0

console.log("-------------------");

console.log(123 || 234);//123
console.log(0 || 234);//234
console.log(0 || -1);//-1
11、JS程 if 结构
常见的if书写结构:

单个 if 语句:这是最简单的 if 语句结构,只包含一个条件和一个代码块。如果条件为真(true),则执行代码块中的语句。

if (condition) {
  // 代码块
}

if-else 语句:if-else 语句包含一个条件和两个代码块,一个用于条件为真时执行,另一个用于条件为假时执行。

if (condition) {
  // 条件为真时执行的代码块
} else {
  // 条件为假时执行的代码块
}

if-else if-else 语句:if-else if-else 语句可以用于多个条件的判断。它包含一个初始的 if 语句块,后面可以跟任意数量的 else if 语句块,最后可以有一个可选的 else 语句块。条件会按顺序进行判断,只有第一个满足条件的代码块会被执行。

if (condition1) {
  // 条件1为真时执行的代码块
} else if (condition2) {
  // 条件2为真时执行的代码块
} else if (condition3) {
  // 条件3为真时执行的代码块
} else {
  // 所有条件都不满足时执行的代码块(可选)
}

嵌套 if 语句:if 语句可以嵌套在其他 if 语句内部,以根据更复杂的条件逻辑执行不同的代码块。

if (condition1) {
  if (condition2) {
    // 条件1和条件2都为真时执行的代码块
  } else {
    // 条件1为真,条件2为假时执行的代码块
  }
} else {
  // 条件1为假时执行的代码块
}
代码练习:

if (new Date().getFullYear() - prompt("请输入你的年龄") > 18) {
        alert("已满18岁,可以进入。");
      } else {
        alert("禁止未成年人进入");
      }

判断是否闰年
var year = prompt("请输入今年的年份");
        if (year % 400 == 0 || year % 4 == 0 && year % 100 != 0) {
            alert("今年是闰年!")
        }
        else {
            alert("今年不是闰年!")
        } 
12、三元表达式
语法结构:条件判断?表达式1:表达式2
        
如果条件判断是真,返回表达式1的值,否则返回表达式2的值*/

// 案例:三元表达式补0
var value = prompt("请你输入一个值");
var val = value < 10 ? "0" + value : value;
alert(val)
13、switch分支语句
语法结构:
switch语句他也是多分支结构,它用于基于不同的条件来执行不同的代码,当要针对变量设置一系列的特定的选项时,就可以使用switch
        
语法:
switch(表达式i){
   case value1:
               表达式1;
               break;
   case value2:
               表达式2;
               break;
   case value3:
               表达式3;
               break;
   default:表达式;
}
表达式和case的value是要相对应的,必须是值和数据类型都是一样的才可以执行指定的表达式
break:如果当前的case中没有break,则不会退出switch,会继续执行下一个case,直到遇到break
switch语句和if语句的区别
1、一般情况下,两个语句可以相互转换使用
2、switch...case语句通常处理case为比较确定的值的情况,而if...else语句更加灵活,常用于范围判断
3、switch语句进行条件判断后直接执行到程序的条件语句,效率比较高。而if..else语句有多种条件,就得判断多少次
4、当分支比较多的情况,使用switch语句,执行效率高
5、当分支比较少的情况,使用if..else语句,结构清晰
代码练习:

var fruitname = prompt("请输入你喜欢的水果:");
      switch (fruitname) {
        case "苹果":
          alert("喜欢的是苹果");
          break;
        case "李子":
          alert("喜欢的是李子");
          break;
        case "梨子":
          alert("喜欢的是梨子");
          break;
        default:
          alert("不知道喜欢什么");
      }
14、For循环语句
代码练习:

// 计算从1到100的和

      let sum = 0;
      for (let i = 1; i <= 100; i++) {
        sum += i;
      }
      console.log(sum); // 5050
// 使用for循环显示一个菱形
      function generateDiamond(rows) {
        const middleRow = Math.ceil(rows / 2);
        let diamond = "";

        for (let i = 1; i <= rows; i++) {
          const spaces = Math.abs(middleRow - i);
          const stars = rows - spaces * 2;

          // 添加空格
          diamond += " ".repeat(spaces);

          // 添加星号
          diamond += "*".repeat(stars);

          // 添加换行符
          diamond += "\n";
        }

        return diamond;
      }

      // 生成7行5列的菱形
      const diamond = generateDiamond(7);
      console.log(diamond);
   AMT练习:
 
      let total_money = 0;
      let str = 0;
      while (str < 4) {
        str = prompt(
          "请输入你要的操作:\n1、存钱\n2、取钱\n3、显示余额\n4、退出"
        );
        switch (str) {
          case "1":
            total_money += Number(prompt("请输入你存入的金额"));
            break;
          case "2":
            if (!total_money) {
              alert("你当前没有金额可取!");
              break;
            }
            let get_money = prompt("请输入你要取出的金额");
            if (get_money < total_money) {
              total_money -= get_money;
              alert("取钱成功!");
            } else {
              alert("你的余额不够!\n你现在的余额是" + total_money);
            }
            break;
          case "3":
            if (!total_money) {
              alert("当前你的账户没有金额!");
              break;
            }
            alert("你的余额是" + total_money);
            break;
        }
      }

和for循环有关的排序前往CSDN

15、typeof
 作用:用于获取给定值的数据类型      
 
        console.log(18);
        console.log(typeof 18);//number

        console.log("18");
        console.log(typeof "18");//string

        console.log(true);
        console.log(typeof true);//boolean

        console.log(undefined);
        console.log(typeof undefined);//undefined

        console.log(null);
        console.log(typeof null);//null

        console.log(prompt("请输入你的年龄"));
        console.log(typeof prompt("请输入你的年龄"));//string
16、JS预解析
JavaScript 预解析是 JavaScript 解释器在执行代码之前的一种处理过程。它涉及到变量和函数声明的提升,即在代码执行阶段之前,JavaScript 引擎会将变量和函数声明提升到其作用域的顶部。

1、变量声明提升:将变量声明移动到作用域的顶部,但不包括变量的赋值。这意味着你可以在声明之前使用变量,而不会引发错误。在变量赋值之前,这些变量的值将是 undefined。

2、函数声明提升:将函数声明移动到作用域的顶部,使其在声明之前就可以调用。

注意:使用 var 声明的变量和使用函数声明语法声明的函数会被提升,而使用 let、const 声明的变量和使用函数表达式声明的函数不会被提升。
      console.log(num1);
      var num1 = 10;
      fun();
      function fun() {
        // 注意:(b = c = 10) 这种定义方式相当于没有使用var声明b变量和c变量
        // 所以b和c在函数外面可以使用,但是a在函数内部使用var声明,所以外界访问的
        // a变量表示没有定义
        var a = (b = c = 10);
        console.log("a:" + a);
        console.log("b:" + b);
        console.log("c:" + c);
        console.log("num1:" + num1);
      }
      console.log(b);
      console.log(c);
      try {
        console.log(a);
      } catch (error) {
        console.log(error);
      }

 17、函数的声明和调用
1、函数声明

function sum(a, b) {
  return a + b;
}
console.log(sum());

2、函数表达式

let sum = function(){
  return a + b;
}
console.log(sum())

3、箭头函数(ES6语法)

let sum = (a, b) => a + b;
console.log(sum())
18、函数形参中arguments
arguments的使用:
当我们不确定有多少个参数传递时,可以使用arguments来获取。
在js中arguments实际上它是当函数的一个内置对象,所有函数都内置了一个arguments对象。
arguments对象中存储了传递的所有实参。
这里的arguments对象可以说成是一个伪数组,也有数组的长度属性。
      let arr = [];
      for (let a = 1; a <= 10; a++) {
        arr.push(Math.floor(Math.random() * 100));
      }

      function func1() {
        return arguments;
      }
      console.log(func1(...arr));

补充:ES6扩展运算符
[...] 扩展运算符能将【数组】转换为逗号分隔的【参数序列】
      const shuzu1 = [1, 2, 3];
      function fun() {
        console.log(arguments);
      }
      fun(shuzu1);
      fun(...shuzu1);

19、函数的rest参数
ES6引入rest参数,用于获取函数的实参,用来代替arduments
ES6获取实参的方式:

和arguments的对比

      function date() {
        console.log(arguments);
      }
      date(1, 2, 3, 4, 5);

      // rest参数,返回的是一个数组,arguments返回的是伪数组
      function date1(...args) {
        console.log(args);
      }
      date1(1, 2, 3, 4, 5);

      // rest参数和arduments参数的区别是,rest参数还可以和其他的参数一起使用

      function date2(a, b, ...args) {
        console.log(a);
        console.log(b);
        console.log(args);
      }

      date2(1, 2, 3, 4, 5);

 

20、创建对象的三种方式
 创建对象的第一种方式:对象字面量     
      let dog = {
        name: "可可",
        type: "阿拉斯加",
        age: 5,
        color: "棕红色",
        bark() {
          console.log("汪汪");
        },
        showFilm() {
          console.log("演电影");
        },
      };

创建对象的第二种方式:使用Object类创建实例
      let object = new Object({
        name: "张三",
        age: 20,
      });

创建对象的第三种方式:构造函数
构造函数是一种特殊的函数主要用来初始化对象,即为对象成员变量初始值,它总与new运算符一起使用,可以把对象中一些公共的属性和方法抽取出来封装到这个函数中。
      function People(name, age) {
        this.name = name;
        this.age = age;
        this.sayhi = () => {
          console.log("你好啊");
        };
      }

      var obj = new People("张三", 20);
      obj.sex = "男";
      console.log(obj);
      obj.sayhi();
 21、获取对象中的属性名称和方法名称
获取对象属性和方法
Object.keys() 返回对象的可枚举属性和方法的名称数组。
Object.getOwnPropertyNames() 返回的数组的所有属性(可枚举或不可枚举)直接找到给定对象。
for...in...获取对象的可枚举属性名称和方法
      let people = {
        name: "张三",
        age: 20,
        address: "广州",
        say() {
          console.log("你好");
        },
        deleteProp(prop) {
          Reflect.deleteProperty(this, prop);
          // 也可以使用delete删除对象
          // delete people[prop];
        },
      };

      let peoInfo = {
        sex: "男",
        info: "个人信息",
      };

      Object.defineProperty(people, "sex", {
        // writable属性不能写在这个对象中
        // enumerable属性可设置成不可枚举的
        enumerable: true,
        // 配置这个属性表示这个属性是可以被删除的
        configurable: true,
        // 获取属性调用
        get() {
          // return peoInfo.sex;
          return Reflect.get(peoInfo, "sex");
        },
        // 修改属性调用
        set(newValue) {
          // peoInfo.sex = newValue;
          Reflect.set(peoInfo, "sex", newValue);
        },
      });

      Object.defineProperty(people, "info", {
        // 表示可写,可修改
        writable: true,
        configurable: true,
        enumerable: true,
        // 初始化
        value: peoInfo.info,
      });
      console.log(people); //获取完成属性和方法

      console.log(Object.keys(people)); //keys获取的是可枚举的属性,所以这里没有sex
      console.log(Object.getOwnPropertyNames(people));
      //getOwnPropertyNames获取的是可枚举和不可枚举的属性,所以这里可以得到sex
      let arr = [];
      for (let i in people) {
        //for in 获取的是可枚举的属性,所以这里没有sex
        arr.push(i);
      }
      console.log(arr);

扩展:Reflect对象,身上有一些方法挺好用的!

Reflect 对象中提供了一系列常用的函数,用于操作对象。以下是一些常用的 Reflect 函数:

Reflect.get(target, propertyKey[, receiver]):返回目标对象中指定属性的值。
Reflect.set(target, propertyKey, value[, receiver]):将目标对象中指定属性的值设置为给定的值。
Reflect.has(target, propertyKey):检查目标对象是否具有指定的属性,并返回一个布尔值。
Reflect.deleteProperty(target, propertyKey):从目标对象中删除指定的属性,返回一个布尔值表示删除成功与否。
Reflect.getOwnPropertyDescriptor(target, propertyKey):返回目标对象中指定属性的属性描述符对象。
Reflect.construct(target, argumentsList[, newTarget]):使用给定的参数列表调用构造函数,并返回一个新创建的对象。
Reflect.apply(target, thisArgument, argumentsList):调用目标函数,并传入指定的 this 值和参数列表。
Reflect.getPrototypeOf(target):返回目标对象的原型对象。
Reflect.setPrototypeOf(target, prototype):将目标对象的原型设置为指定的原型对象。
Reflect.isExtensible(target):检查目标对象是否可扩展,返回一个布尔值。
Reflect.preventExtensions(target):使目标对象变为不可扩展,返回一个布尔值表示是否成功。
Reflect.ownKeys(target):返回目标对象自身的属性键组成的数组,包括字符串键和符号键。
这些函数提供了一种更灵活和统一的方式来执行常见的对象操作,可以替代传统的操作符和函数,使代码更加简洁和易读。

后续前往CSDN

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值