- 博客(439)
- 收藏
- 关注
原创 设计模式之工厂模式
WRITE-BUG研发团队衷心希望【WRITE-BUG数字空间】可以给每位同学一个属于自己的秘密空间,同时祝愿大家在“公开圈子”世界里,遇见志同道合的伙伴们,因为我们与大家一样,都曾孤独前行着。工厂模式定义一个用于创建对象的接口,这个接口由子类决定实例化哪一个类。这个模式十分有用,尤其是创建对象的流程赋值的时候,比如依赖于很多设置文件等。并且,你会经常在程序里看到工厂方法,用于让子类类定义需要创建的对象类型。与创建型模式类似,工厂模式创建对象(视为工厂里的产品)时无需指定创建对象的具体类。
2023-09-06 10:38:14
315
原创 设计模式之建造者模式
根据建造者的定义,表相即是回调,也就是说获取数据以后如何显示和处理取决于回调函数,相应地回调函数在处理数据的时候不需要关注是如何获取数据的,同样的例子也可以在jquery的ajax方法里看到,有很多回调函数(比如success, error回调等),主要目的就是职责分离。WRITE-BUG研发团队衷心希望【WRITE-BUG数字空间】可以给每位同学一个属于自己的秘密空间,同时祝愿大家在“公开圈子”世界里,遇见志同道合的伙伴们,因为我们与大家一样,都曾孤独前行着。// 使用ID来请求数据,然后返回数据.
2023-09-06 10:16:16
310
原创 设计模式之构造函数模式
构造函数用于创建特定类型的对象——不仅声明了使用的对象,构造函数还可以接受参数以便第一次创建对象的时候设置对象的成员值。首先是使用继承很麻烦了,其次output()在每次创建对象的时候都重新定义了,最好的方法是让所有Car类型的实例都共享这个output()方法,这样如果有大批量的实例的话,就会节约很多内存。WRITE-BUG研发团队衷心希望【WRITE-BUG数字空间】可以给每位同学一个属于自己的秘密空间,同时祝愿大家在“公开圈子”世界里,遇见志同道合的伙伴们,因为我们与大家一样,都曾孤独前行着。
2023-09-06 10:13:11
264
原创 设计模式之单例模式
在传统开发工程师眼里,单例就是保证一个类只有一个实例,实现的方法一般是先判断实例存在与否,如果存在直接返回,如果不存在就创建了再返回,这就确保了一个类只有一个实例对象。WRITE-BUG研发团队衷心希望【WRITE-BUG数字空间】可以给每位同学一个属于自己的秘密空间,同时祝愿大家在“公开圈子”世界里,遇见志同道合的伙伴们,因为我们与大家一样,都曾孤独前行着。从本章开始,我们会逐步介绍在JavaScript里使用的各种设计模式实现,在这里我不会过多地介绍模式本身的理论,而只会关注实现。
2023-09-06 10:09:15
52
原创 JavaScript与DOM(下)
上一章节我们提到了DOM节点集合或单个节点的访问步骤,每个DOM节点都包括一个属性集合,大多数的属性都提供为相应的功能提供了抽象。WRITE-BUG研发团队衷心希望【WRITE-BUG数字空间】可以给每位同学一个属于自己的秘密空间,同时祝愿大家在“公开圈子”世界里,遇见志同道合的伙伴们,因为我们与大家一样,都曾孤独前行着。这里我们只是要了基本的CSS属性名称,唯一区别是CSS属性的名称如果带有-的话,就需要去除,比如用marginTop代替margin-top。
2023-09-06 09:49:48
60
原创 JavaScript与DOM(上)
例如,Firefox浏览器使用的Gecko引擎有着很好的实现(尽管没有完全遵守W3C规范),但IE浏览器使用的Trident引擎的实现却不完整而且还有bug,给开发人言带来了很多问题。WRITE-BUG研发团队衷心希望【WRITE-BUG数字空间】可以给每位同学一个属于自己的秘密空间,同时祝愿大家在“公开圈子”世界里,遇见志同道合的伙伴们,因为我们与大家一样,都曾孤独前行着。Text节点在页面里展示的所有文本相关的元素,所以如果你的段落有文本在里面的话,你可以直接通过DOM的Text节点来访问这个文本。
2023-09-06 09:38:07
59
原创 求值策略(Evaluation strategy)
计算机科学里对这种策略一般称为“evaluation strategy”(大叔注:有的人说翻译成求值策略,有的人翻译成赋值策略,通看下面的内容,我觉得称为赋值策略更为恰当,anyway,标题还是写成大家容易理解的求值策略吧),例如在编程语言为求值或者计算表达式设置规则。首先需要注意的是,在ECMAScript中(甚至其他的语如,C,JAVA,Python和Ruby中)都使用了严格的参数传递策略。下面讨论的策略不是全部都用在ECMAScript中,所以在讨论这些策略的具体行为的时候,我们使用了伪代码来展示。
2023-09-05 18:28:54
136
原创 变量对象(Variable Object)
并且,很多程序员也都知道,当前ECMAScript规范指出独立作用域只能通过“函数(function)”代码类型的执行上下文创建。WRITE-BUG研发团队衷心希望【WRITE-BUG数字空间】可以给每位同学一个属于自己的秘密空间,同时祝愿大家在“公开圈子”世界里,遇见志同道合的伙伴们,因为我们与大家一样,都曾孤独前行着。JavaScript编程的时候总避免不了声明函数和变量,以成功构建我们的系统,但是解释器是如何并且在什么地方去查找这些函数和变量呢?var b = 20;// 全局上下文中的变量。
2023-09-05 16:41:53
73
原创 执行上下文(Execution Contexts)
每次当控制器转到ECMAScript可执行代码的时候,即会进入到一个执行上下文。WRITE-BUG研发团队衷心希望【WRITE-BUG数字空间】可以给每位同学一个属于自己的秘密空间,同时祝愿大家在“公开圈子”世界里,遇见志同道合的伙伴们,因为我们与大家一样,都曾孤独前行着。这种类型的代码是在"程序"级处理的:例如加载外部的js文件或者本地标签内的代码。可执行代码的类型这个概念与执行上下文的抽象概念是有关系的。本章我们要讲解的是ECMAScript标准里的执行上下文和相关可执行代码的各种类型。
2023-09-05 16:35:24
84
原创 JavaScript核心(晋级高手必读篇)
每个章节都有一个更详细的内容链接,你可以继续读一下每个章节对应的详细内容链接进行更深入的了解。Object是一个属性的集合,并且都拥有一个单独的原型对象[prototype object]. 这个原型对象[prototype object]可以是一个object或者null值。让我们来举一个基本 Object 的例子,首先我们要清楚,一个 Object 的 prototype 是一个内部的[[prototype]]属性的引用。主要是综合了上面2位高手的中文翻译,将两篇文章的精华部分都结合在一起了。
2023-09-05 16:31:40
52
原创 根本没有“JSON对象”这回事!
我想给大家澄清一下一个非常普遍的误解,我认为很多JavaScript开发人员都错误地把JavaScript对象字面量(Object Literals)称为JSON对象(JSON Objects),因为他的语法和JSON规范里描述的一样,但是该规范里也明确地说了JSON只是一个数据交换语言,只有我们将之用在string上下文的时候它才叫JSON。对象字面量是由大括号({})括起来的零个或多个对象的属性名-值对。JSON是设计成描述数据交换格式的,他也有自己的语法,这个语法是JavaScript的一个子集。
2023-09-05 16:18:30
58
原创 S.O.L.I.D五大原则之里氏替换原则LSP
在面向对象编程里,继承提供了一个机制让子类和共享基类的代码,这是通过在基类型里封装通用的数据和行为来实现的,然后已经及类型来声明更详细的子类型,为了应用里氏替换原则,继承子类型需要在语义上等价于基类型里的期望行为。WRITE-BUG研发团队衷心希望【WRITE-BUG数字空间】可以给每位同学一个属于自己的秘密空间,同时祝愿大家在“公开圈子”世界里,遇见志同道合的伙伴们,因为我们与大家一样,都曾孤独前行着。完整资料进入【数字空间】查看——搜索"writebug"派生类型必须可以替换它的基类型。
2023-09-05 15:38:02
78
原创 S.O.L.I.D五大原则之开闭原则OCP
而Close for modification(对修改关闭)的意思是说不允许对该实体做任何修改,说白了,就是这些需要执行多样行为的实体应该设计成不需要修改就可以实现各种的变化,坚持开闭原则有利于用最少的代码进行项目维护。WRITE-BUG研发团队衷心希望【WRITE-BUG数字空间】可以给每位同学一个属于自己的秘密空间,同时祝愿大家在“公开圈子”世界里,遇见志同道合的伙伴们,因为我们与大家一样,都曾孤独前行着。软件实体(类,模块,方法等等)应当对扩展开放,对修改关闭,即软件实体应当在不修改的前提下扩展。
2023-09-05 15:32:34
77
原创 S.O.L.I.D五大原则之单一职责SRP
一个类(JavaScript下应该是一个对象)应该有一组紧密相关的行为的意思是什么?遵守单一职责的好处是可以让我们很容易地来维护这个对象,当一个对象封装了很多职责的话,一旦一个职责需要修改,势必会影响该对象想的其它职责代码。五大原则,我相信在博客园已经被讨论烂了,尤其是C#的实现,但是相对于JavaScript这种以原型为base的动态类型语言来说还为数不多,该系列将分5篇文章以JavaScript编程语言为基础来展示五大原则的应用。一旦你知道了这些概念,那就狠容易知道你的代码到底是多职责还是单一职责了。
2023-09-05 15:25:04
94
原创 强大的原型和原型链
WRITE-BUG研发团队衷心希望【WRITE-BUG数字空间】可以给每位同学一个属于自己的秘密空间,同时祝愿大家在“公开圈子”世界里,遇见志同道合的伙伴们,因为我们与大家一样,都曾孤独前行着。虽然这经常被当作是 JavaScript 的缺点被提及,其实基于原型的继承模型比传统的类继承还要强大。由于 JavaScript 是唯一一个被广泛使用的基于原型继承的语言,所以理解两种继承模式的差异是需要一定时间的,今天我们就来了解一下原型和原型链。完整资料进入【数字空间】查看——搜索"writebug"
2023-09-05 15:21:18
50
原创 立即调用的函数表达式
在详细了解这个之前,我们来谈了解一下“自执行”这个叫法,本文对这个功能的叫法也不一定完全对,主要是看个人如何理解,因为有的人说立即调用,有的人说自动执行,所以你完全可以按照你自己的理解来取一个名字,不过我听很多人都叫它为“自执行”,但作者后面说了很多,来说服大家称呼为“立即调用的函数表达式”。WRITE-BUG研发团队衷心希望【WRITE-BUG数字空间】可以给每位同学一个属于自己的秘密空间,同时祝愿大家在“公开圈子”世界里,遇见志同道合的伙伴们,因为我们与大家一样,都曾孤独前行着。
2023-09-05 15:15:10
64
原创 全面解析Module模式
大家可能看到了,每次用的时候都要new一下,也就是说每个实例在内存里都是一份copy,如果你不需要传参数或者没有一些特殊苛刻的要求的话,我们可以在最后一个}后面加上一个括号,来达到自执行的目的,这样该实例在内存中只会存在一份copy,不过在展示他的优点之前,我们还是先来看看这个模式的基本使用方法吧。WRITE-BUG研发团队衷心希望【WRITE-BUG数字空间】可以给每位同学一个属于自己的秘密空间,同时祝愿大家在“公开圈子”世界里,遇见志同道合的伙伴们,因为我们与大家一样,都曾孤独前行着。
2023-09-04 16:38:58
72
原创 揭秘命名函数表达式
所以,可以看出,如果不声明函数名称,它肯定是表达式,可如果声明了函数名称的话,如何判断是函数声明还是函数表达式呢?ECMAScript是通过上下文来区分的,如果function foo(){}是作为赋值表达式的一部分的话,那它就是一个函数表达式,如果function foo(){}被包含在一个函数体内,或者位于程序的最顶部的话,那它就是一个函数声明。当然,如果你不关注调试,那就没什么可担心的了,否则,如果你想了解兼容性方面的东西的话,你还是应该继续往下看看。函数表达式和函数声明。
2023-09-04 16:35:44
55
原创 编写高质量JavaScript代码的基本要点
还有问题,特别对于大的项目或是公司,修复bug的这位伙计不是写代码的那个人(且发现bug和修复bug的不是同一个人)。因此,必须降低理解代 码花费的时间,无论是一段时间前你自己写的代码还是团队中的其他成员写的代码。软件bug的修复是昂贵的,并且随着时间的推移,这些bug的成本也会增加,尤其当这些bug潜伏并慢慢出现在已经发布的软件中时。这就是为什么创建可维护的代码对应用程序的成功至关重要。你的代码很能很快就工作了,但是,随着应用的成熟,还会有很多其他的事情发生,这就要求你的进行进行审查,修改,和调整。
2023-09-04 16:32:41
52
原创 Python进阶09 动态类型
通过前两个句子,我们让a,b指向同一个整数对象5(b = a的含义是让引用b指向引用a所指的那一个对象)。我们看到,即使是多个引用指向同一个对象,如果一个引用值发生变化,那么实际上是让这个引用指向一个新的引用,并不影响其他的引用的指向。引用a指向了’at’。WRITE-BUG研发团队衷心希望【WRITE-BUG数字空间】可以给每位同学一个属于自己的秘密空间,同时祝愿大家在“公开圈子”世界里,遇见志同道合的伙伴们,因为我们与大家一样,都曾孤独前行着。在我们接触的对象中,有一类特殊的对象,是用于存储数据的。
2023-09-04 16:29:18
45
原创 Python进阶08 异常处理
WRITE-BUG研发团队衷心希望【WRITE-BUG数字空间】可以给每位同学一个属于自己的秘密空间,同时祝愿大家在“公开圈子”世界里,遇见志同道合的伙伴们,因为我们与大家一样,都曾孤独前行着。但另一方面,如果我们在写程序的时候,知道这里可能犯错以及可能的犯错类型,我们可以针对该异常类型定义好”应急预案“。我们之前在讲循环对象的时候,曾提到一个StopIteration的异常,该异常是在循环对象穷尽所有元素时的报错。首先,我们定义了一个循环对象re,该循环对象将进行5次循环,每次使用序列的一个元素。
2023-09-04 16:26:09
36
原创 Python进阶07 函数对象
这里,map()有两个参数,一个是lambda所定义的函数对象,一个是包含有多个元素的表。map()的功能是将函数对象依次作用于表的每一个元素,每次作用的结果储存于返回的表re中。map通过读入的函数(这里是lambda函数)来操作数据(这里“数据”是表中的每一个元素,“操作”是对每个数据加3)。WRITE-BUG研发团队衷心希望【WRITE-BUG数字空间】可以给每位同学一个属于自己的秘密空间,同时祝愿大家在“公开圈子”世界里,遇见志同道合的伙伴们,因为我们与大家一样,都曾孤独前行着。
2023-09-04 16:22:56
35
原创 Python进阶06 循环对象
循环对象是这样一个对象,它包含有一个next()方法(next()方法,在python 3x中), 这个方法的目的是进行到下一个结果,而在结束一系列结果之后,举出StopIteration错误。当一个循环结构(比如for)调用循环对象时,它就会每次循环的时候调用next()方法,直到StopIteration出现,for循环接收到,就知道循环已经结束,停止调用next()。循环对象的并不是随着Python的诞生就存在的,但它的发展迅速,特别是Python 3x的时代,循环对象正在成为循环的标准形式。
2023-09-04 16:19:15
177
原创 Python进阶05 循环设计
在“循环”一节,我们已经讨论了Python基本的循环语法。这一节,我们将接触更加灵活的循环方式。range()在Python中,for循环后的in跟随一个序列的话,循环每次使用的序列元素,而不是序列的下标。之前我们已经使用过range()来控制for循环。现在,我们继续开发range的功能,以实现下标对循环的控制:print S[i]在该例子中,我们利用len()函数和range()函数,用i作为S序列的下标来控制循环。在range函数中,分别定义上限,下限和每次循环的步长。
2023-09-04 16:15:05
46
原创 Python进阶04 函数的参数对应
WRITE-BUG研发团队衷心希望【WRITE-BUG数字空间】可以给每位同学一个属于自己的秘密空间,同时祝愿大家在“公开圈子”世界里,遇见志同道合的伙伴们,因为我们与大家一样,都曾孤独前行着。关键字(keyword)传递是根据每个参数的名字传递参数。当时我们根据位置,传递对应的参数。在定义函数的时候,使用形如a=19的方式,可以给参数赋予默认值(default)。在第一次调用函数f时, 我们并没有足够的值,c没有被赋值,c将使用默认值10.在调用f时,1,2,3根据位置分别传递给了a,b,c。
2023-09-04 16:04:16
42
原创 Python进阶03 模块
WRITE-BUG研发团队衷心希望【WRITE-BUG数字空间】可以给每位同学一个属于自己的秘密空间,同时祝愿大家在“公开圈子”世界里,遇见志同道合的伙伴们,因为我们与大家一样,都曾孤独前行着。引入模块后,可以通过模块.对象的方式来调用引入模块中的某个对象。上面例子中,first为引入的模块,laugh()是我们所引入的对象。调用a中对象时,我们不用再说明模块,即直接使用对象,而不是a.对象。如果你有自定义的模块,或者下载的模块,可以根据情况放在相应的路径,以便Python可以找到。
2023-09-04 15:44:21
32
原创 Python进阶02 文本文件的输入输出
WRITE-BUG研发团队衷心希望【WRITE-BUG数字空间】可以给每位同学一个属于自己的秘密空间,同时祝愿大家在“公开圈子”世界里,遇见志同道合的伙伴们,因为我们与大家一样,都曾孤独前行着。content = f.readlines() # 读取所有行,储存在列表中,每个元素是一行。content = f.read(N) # 读取N bytes的数据。content = f.readline() # 读取一行。文本文件的读写主要通过open()所构建的文件对象来实现。
2023-09-03 13:14:11
91
原创 Python进阶01 词典
词典和表类似的地方,是包含有多个元素,每个元素以逗号分隔。但词典的元素包含有两部分,键和值,常见的是以字符串来表示键,也可以使用数字或者真值来表示键(不可变的对象可以作为键)。WRITE-BUG研发团队衷心希望【WRITE-BUG数字空间】可以给每位同学一个属于自己的秘密空间,同时祝愿大家在“公开圈子”世界里,遇见志同道合的伙伴们,因为我们与大家一样,都曾孤独前行着。一个特定的表,比如说nl = [1,3,8],就是这个类的一个对象。进阶教程对基础教程的进一步拓展,说明Python的细节。
2023-09-03 13:08:54
36
原创 Python基础09 面向对象的进一步拓展
当定义类的方法时,必须要传递一个self的参数。在一些情况下,我们定义对象的性质,用于记录该对象的特别信息。性别是某个人的一个性质,不是所有的人类都是男,或者都是女。WRITE-BUG研发团队衷心希望【WRITE-BUG数字空间】可以给每位同学一个属于自己的秘密空间,同时祝愿大家在“公开圈子”世界里,遇见志同道合的伙伴们,因为我们与大家一样,都曾孤独前行着。对象拥有类的所有性质,那么我们可以通过self,调用类属性。这样,在类属性的之外,又给每个对象增添了各自特色的性质,从而能描述多样的世界。
2023-09-03 11:06:21
49
原创 Python基础08 面向对象的基本概念
在隶属于这个类比的语句块中,我们定义了两个变量,一个是有羽毛(have_feather),一个是生殖方式(way_of_reproduction),这两个变量对应我们刚才说的属性(attribute)。通过第一句创建对象,并说明summer是类别鸟中的一个对象,summer就有了鸟的类属性,对属性的引用是通过 对象.属性(object.attribute) 的形式实现的。我们这么早切入面向对象编程的原因是,Python的整个概念是基于对象的。比如说,鸟类的共同属性是有羽毛,通过产卵生育后代。
2023-09-03 11:01:56
36
原创 Python基础07 函数
WRITE-BUG研发团队衷心希望【WRITE-BUG数字空间】可以给每位同学一个属于自己的秘密空间,同时祝愿大家在“公开圈子”世界里,遇见志同道合的伙伴们,因为我们与大家一样,都曾孤独前行着。Python通过位置,知道3对应的是函数定义中的第一个参数a, 4对应第二个参数b,然后把参数传递给函数square_sum。将一些操作隶属于一个函数,以后你想实现相同的操作的时候,只用调用函数名就可以,而不需要重复敲所有的语句。括号中的a, b是函数的参数,是对函数的输入。这个函数的功能是求两个数的平方和。
2023-09-03 10:47:31
34
原创 Python基础06 循环
这个循环就是每次从表[3,4.4,‘life’] 中取出一个元素(回忆:表是一种序列),然后将这个元素赋值给a,之后执行隶属于for的操作(print)。当循环执行到i = 2的时候,if条件成立,触发continue, 跳过本次执行(不执行print),继续进行下一次执行(i = 3)。这个表的元素都是整数,从0开始,下一个元素比前一个大1, 直到函数中所写的上限 (不包括该上限本身)(关于range(),还有丰富用法,有兴趣可以查阅, Python 3中, range()用法有变化,见评论区)
2023-09-03 10:42:52
34
原创 Python基础05 缩进和选择
WRITE-BUG研发团队衷心希望【WRITE-BUG数字空间】可以给每位同学一个属于自己的秘密空间,同时祝愿大家在“公开圈子”世界里,遇见志同道合的伙伴们,因为我们与大家一样,都曾孤独前行着。print x没有缩进,是if之外,不跳过,继续执行。if后面跟随条件,如果条件成立,则执行归属于if的一个代码块。在Python中, 去掉了i > 0周围的括号,去除了每个语句句尾的分号,表示块的花括号也消失了。括号中包含的就是块操作,它隶属于if。程序运行到if的时候,条件为True,因此执行x = x+1,。
2023-09-03 10:38:48
43
原创 Python基础04 运算
print True and True, True and False # and, “与”运算, 两者都为真才是真。print 5 in [1,3,5] # 5是list [1,3,5]的一个元素。print 3, 大于;print 5==6 # =, 相等。(还is, is not等, 暂时不深入)
2023-09-03 10:19:59
40
原创 Python基础03 序列
WRITE-BUG研发团队衷心希望【WRITE-BUG数字空间】可以给每位同学一个属于自己的秘密空间,同时祝愿大家在“公开圈子”世界里,遇见志同道合的伙伴们,因为我们与大家一样,都曾孤独前行着。print(s1[0:5:2]) # 从下标0到下标4 (下标5不包括在内),每隔2取一个元素 (下标为0,2,4的元素)tuple和list的主要区别在于,一旦建立,tuple的各个元素不可再变更,而list的各个元素可以再变更。所以,可以看到,序列的引用通过s[]实现, int为下标。
2023-09-03 10:16:18
51
原创 Python基础02 基本数据类型
WRITE-BUG研发团队衷心希望【WRITE-BUG数字空间】可以给每位同学一个属于自己的秘密空间,同时祝愿大家在“公开圈子”世界里,遇见志同道合的伙伴们,因为我们与大家一样,都曾孤独前行着。那么你的内存里就有了一个变量a, 它的值是10,它的类型是integer (整数)。以上是最常用的数据类型。此外还有分数,字符,复数等其他类型,有兴趣的可以学习一下。如果你想让a存储不同的数据,你不需要删除原有变量就可以直接赋值。变量不需要声明,不需要删除,可以直接回收适用。整数,浮点数,真值,字符串。
2023-09-03 10:11:18
38
原创 Python基础01 Hello World!
WRITE-BUG研发团队衷心希望【WRITE-BUG数字空间】可以给每位同学一个属于自己的秘密空间,同时祝愿大家在“公开圈子”世界里,遇见志同道合的伙伴们,因为我们与大家一样,都曾孤独前行着。(在Python 2.x中,print还可以是一个关键字,可写成print ‘Hello World!另一个使用Python的方法,是写一个Python程序。用文本编辑器写一个.py结尾的文件,比如说hello.py。命令行模式: 运行Python,在命令行输入命令并执行。程序模式: 写一段Python程序并运行。
2023-09-02 01:05:35
159
原创 JS事件委托(事件代理)
在 JavaScript 中,页面内事件处理程序的个数会直接影响页面的整体性能,因为每个事件处理程序都是对象,对象会占用内存,内存中的对象越多,页面的性能则越差。事件委托就是把原本需要绑定在子元素上的事件(onclick、onkeydown 等)委托给它的父元素,让父元素来监听子元素的冒泡事件,并在子元素发生事件冒泡时找到这个子元素。利用 JS 事件冒泡动态为元素绑定事件的方法称为事件委托(Event Delegation,也称为“事件代理”),是 JavaScript 中最热门的技术之一。
2023-09-02 01:01:22
72
原创 JS类型转换(强制类型转换+隐式类型转换)
JavaScript 中有五种基本数据类型(其中包括 String、Number、Boolean、Function、Symbol)、三种对象类型(其中包括 Object、Date、Array)和两种特殊类型(其中包括 Null、Undefined)。如果是在 C语言或者 Java 语言中的话,上面的运算会因为运算符两边的数据类型不一致而导致报错,但在 JavaScript 中则不会,因为在运算之前 JavaScript 解释器会将上面的 num 变量隐式的转换为字符串类型,之后再进行运算。
2023-09-02 00:57:02
47
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人