你真的学会javascript了吗?

     2022-03-20     252

关键词:

技术图片
请听题,请在评论区或在心中给出以下代码的执行结果:

var arr = [];
for(var i = 0; i < 3; i++) {
    arr.push(function() {console.log(i)});
}
arr[0]();
arr[1]();
arr[2]();
parseInt("678tianlangstudio");
+"678tianlangstudio";
1 + "678tianlangstudio";

写好答案了吗?要公布答案了哦


0

1

2

NaN

678tianlangstudio

1NaN

如果你的答案跟上面的任意一个匹配上了,那恭喜你! 可以一起往下面看了,因为这是一份全错的答案。

想起上高中时有次英语老师拿了张考卷对着答案讲了半天,然后对我们说:

这是B卷看成A卷的答案了,我们从头讲。

从此我就再不相信什么答案了,甚至遇到做不出的题我都怀疑是不是题出错了!慢慢的养成了独立思考的习惯,不知是好是坏。感谢老师苦心一片,至今教诲良言时犹在耳:

答案错了,重新开始

类型

JavaScript是动态类型语言,也就是说在代码编写时不需要声明指定其类型,变量类型在代码运行时才确定.

基本类型

没有方法、不可变

包括:

  1. undefined
  2. null
  3. boolean
  4. number
  5. string
  6. (symbol)

复杂类型

  1. 对象(包括数组)
  2. 函数

可以使用typeof判断数据类型:

typeof "Bill"              // 返回 "string"
typeof 3.14                // 返回 "number"
typeof true                // 返回 "boolean"
typeof false               // 返回 "boolean"
typeof x                   // 返回 "undefined" (假如 x 没有值)
typeof {name:‘Bill‘, age:62} // 返回 "object"
typeof [1,2,3,4]             // 返回 "object" 
typeof null                  // 返回 "object"
typeof function myFunc(){}   // 返回 "function"

需要注意:

typeof null 返回object 历史原因兼容原来的版本

typeof arr 返回 object 数组也是对象

typeof function testFun() {} 返回 function

类型转换

数据从一个类型转换到另一个类型

强制类型转换和隐式类型转换

强制就是你得自己编写代码转换数据类型,隐式的就是有执行引擎帮你转换.

const x = 17;
const explicit = String(x); //使用强制类型转换把数字x转换为字符串explicit 
const implicit = x + ""; //引擎看到你要把个数字跟字符串相加,就帮你把数字转为字符串了.测试题最后一行类似.

操作符== 和 ===

== 会把两边的数据转换为同一种类型再比较是否相等,也就是忽略数据类型,比如:

1 == ‘1‘;//true

=== 先判断数据类型,数据类型不一样就直接false, 不为其类焉问其值, 比如:

1 === `1`; //false

会被隐式转换为false的类型

  1. undefined
  2. null
  3. false
  4. +0, -0, NaN
  5. "" //空字符串

注意:

‘false‘ -> true

会被隐私转换为true的类型

此处省略10000字

太多,因为除了上面的都是^-^

基本数据类型(Primitives) VS 复杂数据类型(Objects)

  1. 基本数据类型都是不可变的. 复杂数据类型可变并且使用索引操作
  2. 基本数据类型值传递,复杂数据类型使用引用传递(做为函数、方法参数时)

原型链

  1. 非基本数据类型都有关联属性和方法,比如:

    Array.prototype.push()

    String.prototype.toUpperCase()

? 注意:

? String是复杂类型,‘tianlang‘这个是基本数据类型,有些时候它们行为一样,这是因为有自动转化,专业俗语自动装箱. 例如:

1778.toString();//会报错,因为基本类型没有方法。这么粗暴直接冒失的调用执行引擎也不好意思先装个箱
const x = 1788; 
x.toString(); //"1788"  斯文多了,自动装箱成对应的复杂类型走起。
x.__proto__;//Number...

基本数据类型对应的装箱复杂类型:

String()

Number()

Boolean()

Object()

(Symbol())

Java里也有这个概念,但JavaScript除了名字跟Java没半点关系.

  1. 每个对象都持有一个原型的引用
  2. 跟对象关系越近的原型上定义的属性或方法优先级越高

作用域(Scope)

作用域就是变量生效的范围

使用var定义的变量有效范围是从定义开始到所在函数结束.

使用const,let 定义的变量有效范围是从定义开始到所在块结束.

定义提升:

? 这个需要先说下程序执行过程:

  1. 执行引擎读取整个程序脚步
  2. 解析判断是否有语法错误,如果有错误报错退出执行
  3. 把函数保存到内存中
  4. 声明使用var定义的变量(注意:只有声明没有初始化赋值)

  5. .......

    这就是为什么,我们可以先调用一个函数后对这个函数进行定义,可以先使用一个使用var定义的变量,后面才使用var定义变量而不会报错。因为再执行时把函数定义的代码和var定义提升了.注意看3,4.

全局对象

可以把全局对象想象成一颗大树,在程序中定义的变量也好函数也好其实都挂在一个全局对象上。

在浏览器运行环境中,全局对象是window

在Node.js运行环境中,全局对象是global

未完待续...感谢观看,欢迎关注

js继承的7种方法,你学会了吗?(代码片段)

...?📢大家好,我是小丞同学,本文主要写JavaScript中的7种继承方式,深入理解每种方式所存在的问题同时新的方式是如何解决问题的📢非常感谢你的阅读,不对的地方欢迎指正🙏📢愿你生活明... 查看详情

js继承的7种方法,你学会了吗?(代码片段)

...?📢大家好,我是小丞同学,本文主要写JavaScript中的7种继承方式,深入理解每种方式所存在的问题同时新的方式是如何解决问题的📢非常感谢你的阅读,不对的地方欢迎指正🙏📢愿你生活明... 查看详情

数据结构和算法图论,这个算法你学会了吗?

查看详情

前端实现tab栏切换,这么常见的案例你学会了吗?(代码片段)

...4d;+收藏⭐️+留言📝📣系列专栏:硬泡javascript🍁💬格言:迄今所有人生都大写着失败,但不妨碍我继续向前!🔥前些天发现了一个比较好的人工智能学习网站,通俗易懂,风趣... 查看详情

fastadmin过时了吗

...技术,他总是很难理解,不符合你的心意,但是你的心意真的就那么重要吗?要是能完成你的任务,学习新的东西,给作者能提提意见,实在不行GitHub上点个星星也行,别乱喷,也别封为神,沙文主义要不得。 查看详情

unittest框架之断言,你学会了吗??

unittest断言  Python在unittest.TestCase类中提供了很多断言方法。断言方法检查你认为应该满足的条件是否确实满足。如果该条件确实满足,你对程序行为的假设就得到了确认,你就可以确信其中没有错误。如果你认为应该满足的... 查看详情

重新认识httpservletresponse对象,你学会了吗?--乐字节(代码片段)

HttpServletResponse对象Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于**代表请求**的request对象和**代表响应**的response对象。request和response对象代表请求和响应:获取客户端数据,需要通过request对象;**向客... 查看详情

领域模型,你真的理解的了吗?

领域模型,你真的理解的了吗? 背景UML比较难学,主要是其本身很复杂并且涉及到大量的概念名词。领域模型就是其中之一,网络上搜索到关于领域模型的知识应该是有两种,一种是来源于最初的传统软件开发过程,一种来... 查看详情

springboot静态获取bean的三种方式,你学会了吗?

点击关注公众号,实用技术文章及时了解来源:blog.csdn.net/showchi/article/details/97005720注意:调用者要被spring管理目录方式一 注解@PostConstruct方式二 启动类ApplicationContext方式三手动注入ApplicationContext方式一 注解@... 查看详情

http你真的懂了吗?

最近面试踩了些坑,自己看书看过的内容,即使能记得差不多,回答起来就是很混乱(绝望脸)。比如HTTP的这几个问题,现在整理一下,一个点一个点的说! 1.  聊一聊你理解的HTTP 1)  Http在OSI七层模型中... 查看详情

c语言习题:递归实现依次打印出数字,你学会了吗?(代码片段)

今天来分析一道非常经典的递归题目:实现依次打印出数字中的每一位代码如下:#include<stdio.h>voidPrint(intn) if(n>9) Print(n/10); printf("%d",n%10);intmain() intnum=0; scanf("%d",&num); Print( 查看详情

个人创业,你真的准备好了吗?

   对于许多一腔热血的个人创业者来说,在创业初期都面临着一个同样的问题,那就是当真正落实创业项目的时候,就会发现自己因为没有一个明确的目标而感到无从下手,这种情况出现也说明你当下还没有做好个人... 查看详情

java设计模式之单例模式你真的会了吗?(饿汉式篇)

java设计模式之单例模式你真的会了吗?(饿汉式篇)java设计模式之单例模式你真的会了吗?(饿汉式篇)一、什么是单例模式?单例模式(SingletonPattern)是Java中最简单的设计模式之一。这种类型的设计模式属于创建型模式,... 查看详情

c语言排序方法——冒泡排序详解!你学会了吗?

冒泡排序法的基本思路为:每次将相邻的两个数比较,将小的调在前面。举个例子,如果有6个数:9,8,5,4,2,0。第一次先将最前面的两个数9和8对调。第二次将第2个数和第3个数对调(9和5)······如此共进... 查看详情

scrapyspider中间件,你学会了吗?本篇博客有一案例(代码片段)

本篇博客补充一下scrapy中的SpiderMiddlerware相关用法。scrapy架构知识补充在scrapy中所有的中间件都被当做类处理(管理这些中间件的类是MiddlerwareManager),其大概可以分为四种。DownloaderMiddlerware:下载中间件,其... 查看详情

利用java8新特征,重构传统设计模式,你学会了吗?

上一篇:腾讯二面:引入RabbitMQ后,你如何保证全链路数据100%不丢失?来源:cnblogs.com/yjmyzz/p/refactor-design-pattern-using-java8.html一、策略模式二、模板方法三、观察者模式四、责任链/职责链模式java8中提供的很多... 查看详情

golang的slice你真的搞懂了吗(代码片段)

golangslice先看一个简单的代码块packagemainimport( "fmt")funcmain() //case1 a:=[]int a=append(a,1) a=append(a,2) b:=append(a,3) c:=append(a,4) fmt.Println("a:",a,"\\nb: 查看详情

高并发,你真的理解透彻了吗?

高并发,几乎是每个程序员都想拥有的经验。原因很简单:随着流量变大,会遇到各种各样的技术问题,比如接口响应超时、CPUload升高、GC频繁、死锁、大数据量存储等等,这些问题能推动我们在技术深度上不断精进。在过往的... 查看详情