JS基础学习第1天

JS基础第一天

目标

一、认识JavaScript

二、理解变量和常量

三、理解数据类型

一、认识JavaScript

1. 编程语言发展史

阶段一: 机器语言

  • 计算机的存储单元只有0和1两种状态,因此一串代码要让计算机“读懂”,这串代码只能由数字0和1组成。

  • 像这种由数字0和1按照一定的规律组成的代码就叫机器码,也叫二进制编码

  • 一定长度的机器码组成了机器指令,用这些机器指令所编写的程序就称为机器语言。

在这里插入图片描述

在这里插入图片描述

优点:

  • 代码能被计算机直接识别,不需要经过编译解析

  • 直接对硬件产生作用,程序的执行效率非常高

缺点:

  • 程序全是些0和1的指令代码,可读性差,容易出错

  • 不易编写(目前没有人这样开发)

阶段二: 汇编语言

  • 为了解决机器语言的缺陷,人们发明了另外一种语言——汇编语言;

  • 这种语言用符号来代替冗长的、难以记忆的0、1代码。。(mov/push指令,经过汇编器,汇编代码再进一步转成0101)

在这里插入图片描述

优点:

  • 像机器语言一样,可以直接访问、控制计算机的各种硬件设备

  • 占用内存少,执行速度快

缺点:

  • 不同的机器有不同的汇编语言语法和编译器,代码缺乏可移植性。也就是说,一个程序只能在一种机器上运行,换到其他机器上可能就不能运行;

  • 符号非常多、难记。 即使是完成简单的功能也需要大量的汇编语言代码,很容易产生BUG,难于调试

阶段三: 高级语言

  • 最好的编程语言应该是什么? 自然语言

  • 而高级语言, 就是接近自然语言, 更符合人类的思维方式

  • 跟和人交流的方式很相似, 但是大多数编程语言都是国外发明的, 因为都是接近于英文的交流方式

在这里插入图片描述
在这里插入图片描述

优点:

  • 简单、易用、易于理解,语法和结构类似于普通英文;

  • 远离对硬件的直接操作,使得一般人经过学习之后都可以编程,而不用熟悉硬件知识;

  • 一个程序还可以在不同的机器上运行,具有可移植性

缺点:

  • 程序不能直接被计算机识别,需要经编译器翻译成二进制指令后,才能运行到计算机上;

  • 种类繁多:JavaScript 、 C语言、C++、C#、Java、Objective-C 、Python等;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hMa2iGfe-1683960941991)(./img/img05.png)]

2. JavaScript起源

JavaScript是一门高级编程语言, 是前端开发的重要组成部分!

1994年,网景公司(Netscape)发布了Navigator浏览器0.9版

  • 这是历史上第一个比较成熟的网络浏览器,轰动一时。

  • 但是,这个版本的浏览器只能用来浏览,不具备与访问者互动的能力。

  • 网景公司急需一种网页脚本语言,使得浏览器可以与网页互动。

网景公司当时想要选择一种语言来嵌入到浏览器中

  • 采用现有的语言,比如Perl、Python、Tcl、Scheme等等, 允许它们直接嵌入网页;

  • 1995年网景公司招募了程序员Brendan Eich,希望将Scheme语言作为网页脚本语言的可能性;

就在这时,发生了另外一件大事:1995年Sun公司将Oak语言改名为Java,正式向市场推出

  • Java推出之后立马在市场上引起了轰动,Java当初有一个口号:“write once run anywhere”;

  • 网景公司动了心,决定与Sun公司结成联盟,希望将Java嵌入到网页中来运行;

  • Brendan Eich本人非常热衷于Scheme,但是管理层那个时候有点倾向于Java,希望可以简化Java来适应网页脚本的需求;

但是Brendan Eich对此并不感兴趣,他用10天时间设计出来了JavaScript

  • 最初这门语言的名字是Mocha(摩卡);

  • 在Navigator2.0 beta版本更名为LiveScript;

  • 在Navigator2.0 beta 3版本正式重命名为JavaScript,当时是为了给这门语言搭上Java这个热词;

当然10天设计出来语言足够说明Brendan Eich是天才,但是这门语言当时更像是一个多种语言的大杂烩

  • 借鉴C语言的基本语法;

  • 借鉴Java语言的数据类型和内存管理;

  • 借鉴Scheme语言,将函数提升到"第一等公民"(first class)的地位;

  • 借鉴Self语言,使用基于原型(prototype)的继承机制。

Brendan Eich曾经这样描述过JavaScript:

  • 与其说我爱Javascript,不如说我恨它,它是C语言和Self语言一夜情的产物;

  • 十八世纪英国文学家约翰逊博士说得好:'它的优秀之处并非原创,它的原创之处并不优秀。’

微软公司于1995年首次推出Internet Explorer,从而引发了与Netscape的浏览器大战

  • 微软对Netscape Navigator解释器进行了逆向工程,创建了JScript,以与处于市场领导地位的网景产品同台竞争;

  • 这个时候对于开发者来说是一场噩耗,因为需要针对不同的浏览器进行不同的适配;

1996年11月,网景正式向ECMA(欧洲计算机制造商协会)提交语言标准。

  • 1997年6月,ECMA以JavaScript语言为基础制定了ECMAScript标准规范ECMA-262;

  • ECMA-262是一份标准,定义了ECMAScript;

  • JavaScript成为了ECMAScript最著名的实现之一;

  • 除此之外,ActionScript和JScript也都是ECMAScript规范的实现语言;

所以说,ECMAScript是一种规范,而JavaScript是这种规范的一种实现

3. JavaScript的组成

JS是一种运行在客户端(浏览器)的编程语言,实现人机交互效果。

  • JavaScript是ECMAScript的语言层面的实现;

  • 因为除了语言规范之外,JavaScript还需要对页面和浏览器进行各种操作;

  • 除了基本实现之外,还包括DOM操作和BOM操作;

在这里插入图片描述

在这里插入图片描述

二、理解变量和常量

1. 认识变量

思考:在我们平时开发中,使用最多的并不是固定的数据, 而是会变换的数据

  • 购物车商品的数量、价格的计算等等;

  • 一首歌曲播放的时间、进度条、歌词的展示等等;

  • 微信聊天中消息条数、时间、语音的长度、头像、名称等等;

  • 游戏中技能的冷却时间、血量、蓝量、buff时间、金币的数量等等;

在这里插入图片描述

变量就是存放数据的容器

  • 一个变量,就是一个用于存放数值的容器;

  • 这个数值可能是一个用于计算的数字,或者是一个句子中的字符串,或者其他任意的数据;

  • 变量的独特之处在于它存放的数值是可以改变的;

我们可以把变量想象成一个盒子,盒子里面装着我们的数据,我们需要给盒子进行一个特性的名称

在这里插入图片描述

2. 使用变量

2.1 变量的命名格式

变量的声明: 在JavaScript中声明一个变量使用var关键字(variable单词的缩写)(后续学习ES6还有let、const声明方式)

  			   刚开始使用var 定义变量,目的是了解var的使用为了后面能和let、const做个区分

变量的赋值: 使用 = 给变量进行赋值;

// 1. 变量申明
var message = "hello"
// 2. 变量赋值
message = "world"
// 3. 同时申明多个变量
var name, age
name = "zhangsan"
age = 10

2.2 变量的命名规范

变量命名规则:必须遵守

  • 组成部分:数字、字母、下划线、美元符号
  • 第一个字符必须是一个字母、下划线( _ )或一个美元符号( $ )即数字不能作为变量名的开头
  • 其他字符可以是字母、下划线、美元符号或数字
  • 不能使用关键字和保留字命名关键字和保留字|MDN
  • 变量严格区分大小写

变量命名规范:建议遵守

  • 多个单词使用驼峰标识;

  • 赋值 = 两边上一个空格

  • 一条语句结束后加上分号; 也有很多人的习惯是不加;

  • 变量应该做到见名知意

注意事项:变量名尽量不要使用name作为变量名 ,会出现各种问题

2.3 使用注意事项

  1. 如果一个变量未声明(declaration)就直接使用,那么会报错

在这里插入图片描述

  1. 如果一个变量有声明,但是没有赋值,那么默认值是undefined.

在这里插入图片描述

  1. 如果没有使用var声明变量也可以,但是不推荐(事实上会被添加到window对象上)

在这里插入图片描述

三、理解数据类型

1. JS中常见数据类型

JavaScript 中的都具有特定的类型。

  • 例如,字符串或数字

  • 我们可以将值赋值给一个变量,那么这个变量就具备了特定的类型

  • 一个变量可以在前一刻是个字符串,下一刻就存储一个数字

  • 允许这种操作的编程语言,例如 JavaScript,被称为“动态类型”(dynamically typed)的编程语言

在 JavaScript 中有 8 种基本的数据类型(7 种原始类型和 1 种复杂类型(Object))

  • Number

  • String

  • Boolean

  • Undefined

  • Null

  • Object

  • BigInt(后续了解)

  • Symbol(后续了解)

2. typeof操作符

因为 ECMAScript 的类型系统是松散的,所以需要一种手段来确定任意变量的数据类型

  • typeof 操作符就是为此而生的

对一个值使用 typeof 操作符会返回下列字符串之一:

  • "undefined"表示值未定义;

  • "boolean"表示值为布尔值;

  • "string"表示值为字符串;

  • "number"表示值为数值;

  • "object"表示值为对象(而不是函数)或 null;

  • "function"表示值为函数;

  • “symbol”表示值为符号;

typeof()的用法:

你可能还会遇到另一种语法:typeof(x),它与 typeof x 相同;

typeof是一个操作符,并非是一个函数,()只是将后续的内容当做一个整体而已

3. 常见类型详解

3.1 Number类型

  • number 类型代表整数和浮点数。

    var age = 18
    var height = 1.88
    
  • *数字number可以有很多操作,比如,乘法 、除法 /、加法 +、减法 - 等等

    var result = 10 * 2
    var result = 10 / 3
    
  • 除了常规的数字,还包括所谓的“特殊数值(“special numeric values”)”也属于Number类型(了解)

    // Infinity:代表数学概念中的 无穷大 ∞,也可以表示-Infinity;
    console.log(10 / 0) // Infinity
    //  NaN:NaN 代表一个计算错误,它是一个错误的操作所得到的结果
    onsole.log('abc' * 100) // NaN
    
  • 数字类型也有其他的进制表示方法

    // 1. 十进制
    var num1 = 111 // 111
    // 2. 十六进制
    var num2 = 0x111 // 273
    // 3. 八进制
    var num3 = 0o111 // 73
    // 4. 二进制
    var num4 = 0b111 // 7
    
    console.log(num1, num2, num3, num4) // 111 273 73 7
    
  • 数字表示的范围:

    • 最小正数值:Number.MIN_VALUE,这个值为: 5e-324,小于这个的数字会被转化为0

    • 最大正数值:Number.MAX_VALUE,这个值为: 1.7976931348623157e+308

  • isNaN

    用于判断是否不是一个数字。不是数字返回true,是数字返回false

    console.log(isNaN('abc') // true
    console.log(isNaN(123)); // false
    

3.2 String类型

  • 在开发中我们经常会有一些文本需要表示,这个时候我们会使用字符串String

    比如人的姓名,地址

  • JavaScript 中的字符串必须被括在引号里,有三种包含字符串的方式

    • 双引号:“Hello”

    • 单引号:‘Hello’

    • 反引号:Hello(ES6之后学习)

      var name = "zhangsan"
      var address = '安徽省合肥市'
      var description = `张三在合肥良师良职学习前端`
      
  • 前后的引号类型必须一致:

    • 如果在字符串里面本身包括单引号,可以使用双引号;

    • 如果在字符串里面本身包括双引号,可以使用单引号;

      var message = "你们熟悉的老朋友'张三'正是在下"
      
  • 除了普通的可打印字符以外,一些有特殊功能的字符可以通过转义字符的形式放入字符串中:

    在这里插入图片描述

  • 字符串的属性和方法

    字符串还有很多细节和操作方法,后续详细学习

    // 字符串拼接,通过 + 运算符
    var str1 = "hello"
    var str2 = "world"
    var newStr = str1 + str2
    console.log(newStr) // helloworld
    //字符串长度 空格也算一个字符
    console.log(newStr.length) // 10
    

3.3 Boolean类型

  • Boolean(布尔)类型用于表示真假:

    • 比如是否毕业. 是否有身份证. 是否购买车票. 是否成年人;

    • 比如开发中,我们会判断一个账号是否登录、是否是管理员、是否具备某个权限、是否拥有某个英雄、皮肤等;

  • 布尔(英语:Boolean)是计算机科学中的逻辑数据类型,以发明布尔代数的数学家乔治·布尔为名

  • Boolean 类型仅包含两个值:true 和 false

    var flag = true
    var result = 2 === 1
    console.log(flag, result) // true false
    

3.4 Undefined类型

  • Undefined 类型只有一个值,就是特殊值 undefined

    如果我们声明一个变量,但是没有对其进行初始化时,它默认就是undefined

  • 注意事项

    1. 最好在变量定义的时候进行初始化,而不只是声明一个变量;

    2. 不要显示的将一个变量赋值为undefined

      如果变量刚开始什么都没有,我们可以初始化为0、空字符串、null等值

3.5 Object类型

  • Object 类型是一个特殊的类型,我们通常把它称为引用类型或者复杂类型;

    • 其他的数据类型我们通常称之为 “原始类型”,因为它们的值只包含一个单独的内容(字符串、数字或者其他)

    • Object往往可以表示一组数据,是其他数据的一个集合

    • 在JavaScript中我们可以使用 花括号{} 的方式来表示一个对象;

    var info = {
        name: 'zhangsan'age: 18,
        height: 1.88
    }
    
  • Object相关的内容我们会在后续详细讲解。

3.6 Null类型

  • Null 类型同样只有一个值,即特殊值 null。

    null类型通常用来表示一个对象为空,所以通常我们在给一个对象进行初始化时,会赋值为null

    console.log(typeof null) // object
    
    var obj = null
    obj = {
      name: 'zhangsan',
      age: 18
    }
    
  • null和undefined的关系(区别):

    • undefined通常只有在一个变量声明但是未初始化时,它的默认值是undefined才会用到;

    • 并且我们不推荐直接给一个变量赋值为undefined,所以很少主动来使用;

    • null值非常常用,当一个变量准备保存一个对象,但是这个对象不确定时,我们可以先赋值为null

类型小结

JavaScript 中有八种基本的数据类型(前七种为基本数据类型,也称为原始类型,而 object 为复杂数据类型,也称为引用类型

  • number 用于任何类型的数字:整数或浮点数。

  • string 用于字符串:一个字符串可以包含 0 个或多个字符,所以没有单独的单字符类型。

  • boolean 用于 true 和 false。

  • undefined 用于未定义的值 —— 只有一个 undefined 值的独立类型。

  • object 用于更复杂的数据结构。

  • null 用于未知的值 —— 只有一个 null 值的独立类型。

4. 类型转换

4.1 认识类型转换

  • 在开发中,我们可能会在不同的数据类型之间进行某些操作

    • 比如把一个String类型的数字和另外一个Number类型的数字进行运算

    • 比如把一个String类型的文本和另外一个Number类型的数字进行相加

    • 比如把一个String类型或者Number类型的内容,当做一个Boolean类型来进行判断;

  • 也就是在开发中,我们会经常需要对数据类型进行转换

    • 大多数情况下,运算符和函数会自动将赋予它们的值转换为正确的类型,这是一种隐式转换
  • 我们也可以,通过显示的方式来对数据类型进行转换

4.2 String的转换

  • 其他类型经常需要转换成字符串类型,比如和字符串拼接在一起或者使用字符串中的方法。

  • 转换方式一:隐式转换

    • 一个字符串和另一个字符串进行+操作;

      如果+运算符左右两边只有一个是字符串,那么另一边会自动转换成字符串类型进行拼接;

    • 某些函数的执行也会自动将参数转为字符串类型

      比如console.log函数;

  • 转换方式二:显式转换

    • 调用String()函数;

    • 调用toString()方法

4.3 Number的转换

  • 其他类型也可能会转成数字类型

  • 转换方式一:隐式转换

    • 算数运算中,通常会将其他类型转换成数字类型来进行运算;

      比如 “6” / “2”;

      但是如果是+运算,并且其中一边有字符串,那么还是按照字符串来连接的;

    • “+”和一个字符串相连会转换成数字型,如果是两个字符串相连就变成连接符了

  • 转换方式二:显式转换

    我们也可以使用Number()函数来进行显式的转换;

  • 其他类型转换数字的规则:

在这里插入图片描述

4.4 Boolean的转换

  • 布尔(boolean)类型转换是最简单的。

  • 它发生在逻辑运算中,但是也可以通过调用 Boolean()函数 显式地进行转换。

  • 转换规则如下:

    • 直观上为“空”的值(如 0、空字符串、null、undefined 和 NaN)将变为 false。

    • 其他值变成 true。

[在这里插入图片描述

  • 注意:包含 0 的字符串 “0” 是 true
    • 一些编程语言(比如 PHP)视 “0” 为 false。但在 JavaScript 中,非空的字符串总是 true。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值