Js学习
v8引擎
Li Guangqiao - 04/10/2023
v8引擎项目结构 目录/文件描述 api包含了 V8 引擎的 C++ API,可以用来在 C++ 代码中调用 JavaScript 代码 asmjsasmjs 目录是 V8 引擎的 Asm.js 支持代码所在的目录,包含了 Asm.js 相关的头文件和源文件。Asm.js 是一种 JavaScript 子集,可以通过限制语言特性和语法来提高 JavaScript 代码的性能。V8 引擎通过解析 Asm.js 代码,并将其编译成高效的机器码来提高 JavaScript 代码的性能。asmjs 目录下的代码实现了 Asm.js 相关的解析器、编译器、代码生成器等功能,是 V8 引擎支持 Asm.js 的基础。在 asmjs 目录下,asm-js.cc 文件实现了 Asm.js 相关的函数和类,包括 StdlibMathMember 和 AreStdlibMembersValid 等函数,用于解析和编译 Asm.js 代码。 astast 目录是 V8 引擎的抽象语法树(AST)相关代码所在的目录,包含了 AST 相关的头文件和源文件。抽象语法树是一种用于表示程序语法结构的树形数据结构,可以用于编译器的语法分析、代码优化和代码生成等过程。在 V8...
js隐式转换
Li Guangqiao - 22/08/2023
js的隐式转换 目前常见的隐式转换 相关数据类型 let str = "hello"; let str_num = "1" let boo = true; let num = 10; 隐式数据类型转换 隐式转换优先其他类型转换成字符串。 数值、布尔值与字符串相加会隐式转换成字符串 console.log(str+boo)//字符串+bool值 "hellotrue" console.log(str+num)//字符串+数值 "hello10" console.log(str_num+num)//数值型字符串+数值 "110" 非字符串下优先数值。 布尔值会隐式转换 true => 1 false => 0 console.log(num+10) //bool值+数值 11 字符串和布尔值比较: 当一个字符串和一个布尔值进行比较时,JavaScript 会将布尔值转换为数字(true 为 1,false 为 0),然后与字符串进行比较。 console.log("10">true); //true console.log("a">true); //false 不同数据类型的比较: 在比较不同数据类型时,JavaScript 会尝试将其中一个值转换为另一个值的数据类型,然后再进行比较。这可能导致一些奇怪的结果。 console.log("42"==42);//true console.log("42"===42); //false 注意:在 JavaScript 中,双等号 == 和三等号 === 是用于比较值的操作符,核心区别是比较是否做隐式转换: 双等号:双等号进行比较时会进行隐式类型转换。它会尝试将比较的两个值转换为相同的数据类型,然后再进行比较。这就导致了一些令人困惑的情况,因为不同数据类型的值在隐式转换后可能会变得相等。 三等号:三等号进行比较时不会进行隐式类型转换,而是直接比较值和数据类型。只有在值和数据类型都相同的情况下,才会返回 true。 ...
js学习笔记(6)——集合类型
Li Guangqiao - 12/08/2023
集合引用类型 Object Object很适合存储和在应用程序间交换数据。 //声明方式 let obj = new Object(); obj.age = 1; let obj_one = { age:1 }; //属性访问 //点语法 console.log(obj.age); //变量语法 console.log(obj["age"]); Object不管是实验和生产环境中都很常用所以这里不做过多的阐述 Array Array同样是js中常用的引用类型。 js的数组不同于其他编程语言,其每一个槽位都可以存储任意类型的数据。 数组创建 //长度为20的空数组 let colors = new Array(20); //成员为"1","2"的数组 colors = new Array("1","2"); colors = ["1","2"]; ES6中还有两个创建数组的方法 通过from方法去创建数组 // 字符串会被拆分为单字符数组 console.log(Array.from("Matt")); // ["M", "a", "t", "t"] // 可以使用 from()将集合和映射转换为一个新数组 const m = new Map().set(1, 2) .set(3, 4); const s = new Set().add(1) .add(2) .add(3) .add(4);...
js学习笔记(8)——对象、类与面向对象编程
Li Guangqiao - 31/07/2023
对象、类与面向对象编程 理解对象 创建自定义对象的通常方式是创建Object的一个新实例: let person = new Object(); person.name = "Nicholas"; person.age = 29; person.job = "Software Engineer"; person.sayName = function() { console.log(this.name); }; //前面的例子 let person = { name: "Nicholas", age: 29, job: "Software Engineer", sayName() { console.log(this.name); } }; 属性的类型 数据属性 [[Configurable]]:表示属性是否可以通过delete删除并重新定义,是否可以修改它的特性,以及是否可以把它改为访问器属性。注:默认所有直接定义在对象的属性的这个特性都是true。 [[Enumberable]]:表示属性是否可以通过for-in循环返回。默认情况下,所有直接定义在对象上的属性的这个特性都是true。 [[Writable]]:表示属性的值是否可以被修改。默认情况下,所以直接定义在对象上的属性的,这个特性都是true。 [[Value]]:包含属性实际的值。这就是前面提到的那个读取和写入属性值的位置。这个特性的默认值为undefined。 查看对象属性的方式:Object.getOwnPropertyDescriptor方法 var obj = { "name":"test" }; console.log(Object.getOwnPropertyDescriptor(obj, 'name')) //output //{ value: 'test', writable: true, enumerable:...