首页 > 其他分享 >new/类/null/+/PrimitiveValue/valueOf/toString/环境/HTML 脚本元素属性

new/类/null/+/PrimitiveValue/valueOf/toString/环境/HTML 脚本元素属性

时间:2024-06-07 09:56:25浏览次数:18  
标签:prototype 对象 valueOf HTML toString constructor new null 声明

new

function myObjCreate(proto){
function F(){}
F.prototype = proto
return new F();
}
function myNew(F,...args){
let obj = myObjCreate(F.prototype)
let res = F.call(obj,...args);
return typeof res === 'object' && res !== null ? res : obj;
}
如果构造函数返回的是基本类型(如字符串、数字、布尔值、null、undefined),这些返回值会被忽略,new操作符会返回新创建的对象。

类只能用new运算来创建,而不能使用“()”来做函数调用
new AClass() // ok
AClass() // TypeError: Class constructor AClass cannot be invoked without 'new'

obj.foo() // ok
new obj.foo() // TypeError: obj.foo is not a constructor

类:只可以做new运算;
方法:只可以做调用“( )”运算;
一般函数:(除部分函数有特殊限制外,)同时可以做new和调用运算。
区分 3 者
类:定义类的方法是使用class关键字。
方法:附加在对象上的函数,通常定义在对象字面量或者类内部
一般函数:一般函数是普通的函数声明或函数表达式
function myExtends(Child, Parent) {
// 创建一个新的对象,该对象的原型指向 Parent.prototype
Child.prototype = Object.create(Parent.prototype);
// 修复 Child.prototype.constructor 指向 Child 自身
Child.prototype.constructor = Child;
// 允许 Child 访问 Parent
Child.proto = Parent;
}

在类声明中,如果是类静态声明,也就是使用static声明的方法,那么主对象就是这个类,例如AClass。
就是一般声明,那么该方法的主对象就是该类所使用的原型,也就是AClass.prototype。
第三种情况,如果是对象声明,那么方法的主对象就是对象本身。

类声明中 extends 是 null,那么构造方法中没有 this 也不能调用 super()。
class MyClass extends null {
}
new 后报错 Uncaught TypeError: Super constructor null of MyClass is not a constructor
class MyClass extends null {
constructor() {
}
}
new 后报错 Uncaught ReferenceError: Must call super constructor in derived class before accessing 'this' or returning from derived constructor

对象和数组的区别

对象和数组都是用来存储数据的两种结构。数组是一种特殊的对象,它用数字作为标签(索引)来存储数据,比如a[0]表示数组a中的第一个元素。而对象用名字作为标签来存储数据,比如obj.name表示对象obj中的一个叫name的属性。

JavaScript中的数据结构主要有两种:
索引数组(用数字索引的数组)
关联数组(用名字作为标签的对象)

null

null是一个对象类型
原子对象:原子对象是最基本的对象,它的原型是null。一个原子对象没有任何属性,也没有原型。
class MyClass extends null {}
let instance = new MyClass(); console.log(Object.getPrototypeOf(MyClass.prototype)); // 输出 null console.log(instance); // 输出 {}

+

[] + {} // 空数组[]被转换成空字符串'',空对象{}被转换成字符串'[object Object]',然后这两个字符串连接起来。
'[object Object]'
{} + [] // {}被视为一个空的代码块,所以没有任何作用,而空数组[]被转换成数字0。
0
{} + {} // 第一个 {} 被视为代码块,后面的 +{} 尝试将 {} 转换为数值,结果是 NaN,这里的+号作为一元运算符
NaN
[] + [] // 两个空数组都被转换成空字符串,连接起来仍然是空字符串。
''
上面执行反应了+符号在字符串拼接,数字计算,一元运算符
上面有两个案例是因为 js 的【自动分号插入(ASI)】机制,可以看成下面的结果
{}; +[]

PrimitiveValue

五种PrimitiveValue内部槽:number,string,boolean,symbol,bigint。
上面这 5 种在经过ToPrimitive(hint) 转换时直接调用x.valueOf()
返回原始值。
在默认情况下,JavaScript更倾向于把对象转换为数字类型。因为hint 默认是 number

valueOf/toString

如果用户代码试图得到“number”类型,但x.valueOf()返回的是一个对象,那么就还会调用x.toString(),并最终得到一个字符串。
let x = {
valueOf() {
return {}; // 返回一个对象
},
toString() {
return "Hello";
}
};
// 尝试将 x 转换为数字
console.log(x + 5); // 输出 "Hello5"

环境:

全局环境(Global Environment):声明环境+对象环境
声明环境:函数环境(Function Environment)/模块环境(Module Environment)/Eval环境(Eval Environment)
声明环境(Declarative Environment):抽象的概念,用于存储通过 var、let、const 声明的变量和函数声明。
对象环境(Object Environment):全局对象(如浏览器中的 window 对象或 Node.js 中的 global 对象),其中包含全局变量和函数作为其属性。

变量环境(Variable Environment):主要用于记录通过 var 声明的变量和函数声明。
词法环境(Lexical Environment):主要用于记录通过 let、const 和函数声明的变量。

HTML 脚本元素属性:async 与 defer 与 type=’module’

https://cdn-images-1.medium.com/v2/resize:fit:1117/1*nmzAKz_RSbZ-E-m5B6pPaA.png

标签:prototype,对象,valueOf,HTML,toString,constructor,new,null,声明
From: https://www.cnblogs.com/beilo/p/18236579

相关文章

  • 微前端学习笔记(5):从import-html-entry发微DOM/JS/CSS隔离
    import-html-entry 是qiankun中一个举足轻重的依赖,用于获取子应用的HTML和JS,同时对HTML和JS进行了各自的处理,以便于子应用在父应用中加载。 import-html-entry主要是实现了以下几个能力拉取url对应的html并且对html进行了一系列的处理拉取上述html中所......
  • 制作一个简单HTML静态网页(HTML+CSS) (2)
    ......
  • 一个简单的HTML网页 、个人主页网页设计(HTML+CSS) (2)
    ......
  • HTML-常用标签
    HTML-常用标签1超链接标签:<ahref="..."target="...">超链接属性:href:指定资源访问的urltarget:指定在何处打开资源链接_self:默认值,在当前页面打开_blank:在空白页面打开<imgsrc="img/news_logo.png"><ahref="http://www.baidu.com/"t......
  • HTML-页面布局
    HTML-页面布局1盒子模型盒子:页面中所有的元素(标签),都可以看做是一个盒子,由盒子将页面中的元素包含在一个矩形区域内,通过盒子的视角更方便的进行页面布局盒子模型组成:内容区域(content)、内边距区域(padding)、边框区域(border)、外边距区域(margin)盒子的大小,其实就包括三个部分:bo......
  • 垃圾分类 环保主题 网页设计 html源码 大作业
    ......
  • HTML2
    HTML进阶webstorm(2099)用来写前端的标签分类块级标签:块级标签可以修改长度,可以嵌套任意标签divol+li,ul+litableph1...h6行级标签:不可以修改长度,只能嵌套行内标签spanastrong:加粗em:斜体imgbr特殊符号(分号结尾)空格&nbsp大于号&gt小于号&......
  • vue中html导出成word
    vue中将html中内容转换为word文档导出,无需模板,可以导出echarts图表。使用html-docx-js、file-saver。先将html中内容获取,之后将页面上的元素转成图片,然后把图片放到word文件中进行导出。参考链接:https://blog.csdn.net/weixin_47494533/article/details/13701867......
  • vue中html导出成word
    vue中将html中内容转换为word文档导出,无需模板,可以导出echarts图表。使用html-docx-js、file-saver。先将html中内容获取,之后将页面上的元素转成图片,然后把图片放到word文件中进行导出。参考链接:https://blog.csdn.net/weixin_47494533/article/details/137018678 ......
  • html标签的快捷
     html标签的快捷录入方式一:<ul><li><ahref=""></a></li></ul>如果要写上面的标签,直接写##ul>li>a然后按Tap键盘,就可以快速构建二:<ul><li><ahref=""></a></li><li><......