JavaScript自学Day1-基础语法

124 阅读6分钟

日期:2023-03-23 学习目标:理解变量、数据类型、运算符等基础概念,能够实现数据类型的转换,结合四则运算体会如何编程。

JavaScript介绍

介绍

JavaScript是什么? JavaScript是一种运行在客户端(浏览器)的编程语言,实现人机交互效果 JavaScript能做什么? 网页特效 表单验证 数据交互 服务端编程 JavaScript的组成 ECMAScript+WebAPIs(DOM+BOM)

JavaScript书写位置

内部JavaScript:通过 script 标签包裹 JavaScript 代码 外部JavaScript:通过script的src属性引入独立的.js文件 [推荐] 行内JavaScript

JavaScript的结束符

在JavaScript中 ; 代表一段代码的结束,多数情况下可以省略

JavaScript的输入输出语法

输出

  1. alert() 页面弹出警告对话框
alert('你好,JS!')
  1. document.wirte() 向body内输出内容,如果输出的内容写的是标签,也会被解析成网页元素
document.write('你好,JS!')
document.write('<h1>一级标题</h1>')
  1. console.log() 控制台输出语法,调试使用

输入

prompt() 输入任意内容会以弹窗形式出现在浏览器中,一般提示用户输入一些内容。

prompt('请输入购买数量')

JavaScript代码的执行顺序

按照HTML文档流顺序执行JavaScript代码 alert()和prompt()会跳过渲染先被执行

变量

变量是用于存储信息的"容器"。 变量不是数据本身,它们仅仅是一个用于存储数值的容器

声明变量

在 JavaScript 中创建变量通常称为"声明"变量(定义变量)。 语法:

let 变量名
  • 声明变量有两部分构成:声明关键字、变量名(标识)
  • let 即关键字(let:许可、让、要),所谓的关键字是系统提供的专门用来声明(定义)变量的词语
  • let不允许多次声明同一个变量

声明多个变量:多个变量中间用 , 隔开(不推荐,可读性不好)

let age = 25,name = '小王'

赋值

变量声明之后,该变量是空的(它没有值),使用 = 对变量赋值

变量可以在声明后为其赋值,通常也可以在声明的同时直接对该变量赋值(称为变量初始化)

一个好的编程习惯是,在代码开始处,统一对需要的变量进行声明。

let age = 25
let name = '小王'
console.log(age)
console.log(name)

更新变量:重新给变量赋值

let age = 25
age = 28

输入用户名并输出:

let uname = prompt('请输入姓名')
document.write(uname)

交换两个变量:声明一个 临时变量temp 来做中间存储

let num1 = 20
let num2 = 6
let temp
temp = num1
num1 = num2
num2 = temp

变量的本质

内存:计算机中存储数据的地方,相当与一个空间 变量的本质:是程序在内存中申请的一块用来存放数据的空间

变量命名规则与规范

关于变量的名称(标识符)有一系列的规则和规范需要遵守 规则:

  1. 只能是字母、数字、下划线、$,且不能以数字开头
  2. 字母区分大小写,如 Age 和 age 是不同的变量
  3. JavaScript 内部已占用于单词(关键字或保留字)不允许使用 规范:
  4. 尽量保证变量具有一定的语义,见字知义
  5. 遵守小驼峰命名法(第一个单词首字母小写,之后单词首字母大写,例如:userName)

let和var的区别

在较旧的JavaScript,使用关键字var来声明变量,而不是let,但现在的开发中一般不再使用。let的出现是为了解决var中的一些问题。

以下是使用 let 时的注意事项:

  1. 允许声明和赋值同时进行
  2. 不允许重复声明
  3. 允许同时声明多个变量并赋值
  4. JavaScript 中内置的一些关键字不能被当做变量名

以下是使用 var 时一些问题:

  1. 可以先使用再声明(不合理)
  2. 允许重复声明(不合理)
  3. 比如变量提升、全局变量、没有块级作用域等存在bug

数组

数组(Array)——是一种将一组数据存储在单个变量名下的方式

  1. 声明语法: let arr = [] let 数组名 = [数据1,数据2,...,数据n]
  2. 使用数组 数组名[索引号]
let arr = ['刘邦','王莽','刘秀','刘备']
console.log(arr[2])  //控制台输出打印索引号为0的数据
  • 数组内的数据按顺序保存,每个数据都有自己的编号,该编号称为索引号或下标号
  • 数组中的编号从0开始
  • 数组可以存储任意类型的数据
  1. 一些术语 元素:数组中保存的每个数据叫数组的元素 下标:数组中数据的编号 长度:数组中数据的个数,通过数组的length属性获得
//获取数组长度
console.log(arr.length)

数组长度=最后一个索引号+1

常量

当某个变量永远不会改变时,可以使用const来声明,此时就称其为常量 常量的声明: const 常量名 = 常量值

  • 常量声明时必须赋值(初始化)
  • 常量不允许重新赋值,不允许再次声明

数据类型

JavaScript是一种有着动态类型的动态语言,这意味着相同的变量可用作不同的类型 同时它也是一种弱数据类型语言,这意味着当操作涉及不匹配的类型时,它将允许隐式类型转换

JavaScript中的数据类型整体分为两大类:

  • 基本类型(原始类型) 数字型(number)、字符串型(string)、布尔型(boolean)、未定义型(undefined)、空类型(null)
  • 引用类型 对象(object)、数组(Array)、函数(Function)

数字类型(number)

即数学中的数字,可以是整数、小数、正数、负数

了解: 数字类型可以加上前缀,来表示不同的进制 不写:表示10进制 0:表示8进制 0x:表示16进制 0b: 表示2进制

算术运算符 求和:+ 求差:- 求积:* 求商:/ 取模(取余数):% 常用于判断一个数能否被整除

console.log(4 % 2) // 求余数  0
console.log(5 % 3) // 求余数  2
console.log(3 % 5) // 求余数  3

了解: NaN代表一个计算错误,它是一个不正确的或者未定义的数学操作所得到的结果,例如 console.log('老王'+1) 其返回值即为NaN NaN是粘性的,任何对NaN的操作都会返回NaN

字符串类型(string)

通过单引号( '') 、双引号( "")或反引号包裹的数据都叫字符串,单引号和双引号没有本质上的区别,推荐使用单引号。

注意事项:

  1. 无论单引号或是双引号,都必须成对使用
  2. 单引号或双引号可以互相嵌套,但是不能自已嵌套自已
  3. 必要时可以使用转义符 \,输出单引号或双引号
在字符串中,如需表示一个特殊字符,可以使用转义符 \
\n 换行符
\t 制表符

字符串拼接 可以使用 + 拼接字符串

let age = 25
document.write('小明今年' + '18岁了')
document.write('小明今年' + age + '岁了')

模板字符串 通常用于拼接字符串和变量 模板字符串的用法: 外面使用反引号包裹,出现的变量则使用${变量名}的形式

let name = prompt('请输入您的姓名:')
let like = prompt('请输入您的爱好:')
document.write(`大家好我叫${name},我的爱好是${like}!`)

布尔类型(boolean)

布尔类型用于表达真或假两种状态

  • true,表示真
  • false,表示假

未定义类型(undefined)

未定义是比较特殊的类型,只有一个值 undefined,只声明变量,不赋值的情况下,变量的默认值为 undefined

空类型(null)

表示内容为空或值未知 只有一种数据书写方式:null

开发场景:若确定一个变量存放的是object,但并未准备好,可以先使用null代替

类型检测

在数据前加上typeof,例:

    <script>
        console.log(typeof 25);
        console.log(typeof "25");
        console.log(typeof true);
        console.log(typeof undefined);
        console.log(typeof null);
        console.log({
            name: "小王",
            nickName: "八蛋",
            age: 1000,
            gender: true, //true表示男,false表示女
            address: {
                country: "帝国",
                province: "天龙省",
                city: "金龟城",
                detail: "老王八街250号"
            },
            girlFriend: undefined
        });
    </script>

![[得到数据类型.jpg]]

类型转换

使用表单、prompt获取的数据默认为字符串类型,若牵扯到计算,需要转换为数字类型的数据

隐式转换

某些运算符被执行时,系统内部自动将数据类型进行转换,这种转换称为隐式转换。 隐式转换发生场景:

    • 号两边只要有一个数据是字符串,都会把另外一个数据转成字符串
  • 除了+以外的算术运算符 比如 - * / 等都会把数据转成数字类型

小技巧: 当 + 号作为正号时可以将数据转换成数字型 任何数据和字符串相加结果都是字符串型

![[隐式转换.jpg]]

显式转换

编写程序时过度依靠系统内部的隐式转换是不严禁的,因为隐式转换规律并不清晰,大多是靠经验总结的规律。为了避免因隐式转换带来的问题,通常根逻辑需要对数据进行显示转换。

转换为数字型: Number(数据)

let a = '10'
let b = 3
a = Number(a)
// 检测转换后的类型
// console.log(typeof a)
// 返回值为 number
console.log(a + b) 
// 结果为 13
// 并不是所有的值都可以被转成数值类型
let str = 'abc'
// 将 abc 转成数值是不现实的,当无法转换成数值时,得到的结果为 NaN (Not a Number)
console.log(Number(str))
// 结果为 NaN
将字符串转换成数字
Number("3.14")    // 返回 3.14  
Number(" ")       // 返回 0  
Number("")        // 返回 0  
Number("99 88")   // 返回 NaN
将布尔值转换成数字
Number(false)     // 返回 0  
Number(true)      // 返回 1

如果字符串内容里有非数字,转换失败时结果为 NaN(Not a Number)即不是一个数字。 NaN也是number类型的数据,代表非数字。

parseInt(数据) 转换成数字型,只保留整数

    console.log(parseInt('12px'))  //结果:12
    console.log(parseInt('12.34px'))  //结果:12
    console.log(parseInt('12.94px'))  //结果:12
    console.log(parseInt('abc12.94px'))  //结果:NaN

parseFloat(数据) 转换成数字型,保留小数

    console.log(parseFloat('12px'))  //结果:12
    console.log(parseFloat('12.34px'))  //结果:12.34
    console.log(parseFloat('12.94px'))  //结果:12.94
    console.log(parseFloat('abc12.94px'))  //结果:12.94

转换为字符串型 String(数据)

将数字转换为字符串
String(x)         // 将变量 x 转换为字符串并返回  
String(123)       // 将数字 123 转换为字符串并返回  
String(100 + 23)  // 将数字表达式转换为字符串并返回
将布尔值转换为字符串
String(false)        // 返回 "false"  
String(true)         // 返回 "true"

变量.toString(进制)

进制不写即为10进制

将数字转换成字符串
x.toString()           // 将变量 x 转换为字符串并返回
(123).toString()       // 将数字 123 转换为字符串并返回
(100 + 23).toString()  // 将数字表达式转换为字符串并返回
将布尔值转换成字符串
false.toString()     // 返回 "false"  
true.toString()      // 返回 "true"