JavaScript基础

数据类型

指的就是字面量的类型;在JS中一共有六种数据类型:

  • String 字符串
  • Number 数值
  • Boolean 布尔值
  • Null 空值
  • Undefined 未定义
  • object 对象

其中String Number Boolean Null Undefined属于基本数据类型而0bject属于引用数据类型

String 字符串
  • 在JS中字符串需要使用引号引起来
  • 使用双引号或单引号都可以
  • 引号不能嵌套,双引号不能放双引号,单引号不能放单引号
Number 数字

在JS中所有的数值都是Number类型,包括整数和浮点数(小数)

JS中可以表示的数字的最大值
Number. MAX VALUE
1.7976931348623157e+308

Number .MIN_ _VALUE 大于0的最小值
5e-324

如果使用Number表示的数字超过了最大值,则会返回一个Infinity(字面量) 表示正无穷
-Infinity 表示负无穷
使用typeof检查Infinity也会返回Number

NaN是一个特殊的数字,表示Not A Number
使用typeof检查一个NaN也会返回number

unll和undefine

null这个值专门用来表示-一个为空的对象;使用typeof检查一个null值时,会返回object

Undefined类型的值只有一个,就undefind当声明一个变量,但是并不给变量赋值时,它的值就是undefine
使用typeof检查一个undefined时也会返回undefined

强制类型转换

指将一个数据类型强制转换为其他的数据类型类型转换主要指,将其他的数据类型,转换为String Number Boolean

将其他的数据类型转换为String
方式一:
调用被转换数据类型的toString( )方法
该方法不会影响到原变量,它会将转换的结果返回
但是注意: null和undefined这两个值没有toString
如果调用他们的方法,会报错


方式二:
	调用String()函数,并将被转换的数据作为参数传递给函数
	使用String( )函数做强制类型转换时,
	对于Number和Boolean实际上就是调用的toString()方法
	但是对于null和undefined,就不会调用toString()方法
	它会将null直接转换为"null"
	将undefined直接转换为"undefined"
将其他的数据类型转换为Number

转换方式一:
使用Number()函数

字符串–>数字

  1. 如果是纯数字的字符串,则直接将其转换为数字
  2. 如果字符串中有非数字的内容,则转换为NaN
  3. 如果字符串是一个空串或者是一个全是空格的字符

布尔–>数字
true转成1
false转成0

null -->数字0
undefined -->数字NaN

转换为布尔类型

调用Boolean( )函数来将a转换为布尔值

  • 数字—>布尔
    除了0和NaN,其余的都是true

  • 字符串—>布尔

    • 除了空串,其余的都是true
    • null和undefined都会转换为false
  • 对象也会转换为true

算数运算符

运算符也叫操作符;通过运算符可以对一个或多个值进行运算,并获取运算结果。
比如: typeof就是运算符,可以来获得一个值的类型。返回字符串。

算数运算符:

当对非Number类型的值进行运算时,会将这些值转换为Number然后在运算(除了字符串相加运算),任何值和NaN做运算都得NaN。

  • +
    可以对两个值进行加法运算,并将结果返回如果对两个字符串进行加法运算,则会做拼串会将两个字符串拼接为一个字符串,并返回任何的值和字符串做加法运算,都会先转换为字符串,然后再相加。
  • -相减运算
  • *相乘运算
  • /相除运算

任何值和字符串相加都会转换为字符串,并做拼串操作我们可以利用这一特点, 来将-一个任意的数据类型转换为String我们只需要为任意的数据类型+一个""即可将其转换为String

一元运算符,只需要一个操作数

+正号

  • 正号不会对数字产生任何影响

-负号

  • 负号可以对数字进行负号的取反
  • 对于非Number类型的值:

它会将先转换为Number,然后在运算;可以对一个其他的数据类型使用+,来将其转换为number;它的原理和Number()函数一样

自增++

  • 通过自增可以使变量在自身的基础上增加1
  • 对于一个变量自增以后,原变量的值会立即自增1
  • 自增分成两种:后++(a++)和前++(++a)
  • 无论是a++还是++a,都会立即使原变量的值自增1
  • 不同的是a++和++a的值不同a++的值等于原变量的值(自增前的值)

自减和自增类似

逻辑运算

对于非布尔值进行与或运算时
会先将其转换为布尔值,然后再运算,并且返回原值

与运算:

  • 如果第一个值为true,则必然返回第二个值
  • 如果第一个值为false,则直接返回第一个值

或运算

  • 如果第一个值为true,则直接返回第 一个值
  • 如果第一个值为false,则返回第二个值
非数字的大小关系比较

非数值的情况
对于非数值进行比较时,会将其转换为数字然后在比较
如果符号两侧的值都是字符串时,不会将其转换为数字进行比较而会分别比较字符串中字符的Unicode编码

如果比较的两个字符串型的数字,可能会得到不可预期的结果
注意:在比较两个字符串型的数字时,一 定要转型

undefined衍生自null
所以这两个值做相等判断时,会返回true

NaN不和任何值相等,包括他本身
可以通过isNaN( )函数来判断一个值是否是NaN

===全等

  • 用来判断两个值是否全等,它和相等类似,不同的是它不转换类型;如果两个值的类型不同,直接返回false。
  • 与之相反的是不全等!==

JavaScript和Java的区别

  • JS中的代码块,只具有分组的的作用,没有其他的用途
    代码块内容的内容,在外部是完全可见的

输入:
prompt()可以弹出一个提示框,该提示框中会带有一个文本框,
用户可以在文本框中输入一段内容,该函数需要一个字符串作为参数,该字符串将会作为提示框的提示文字
用户输入的内容将会作为函数的返回值返回,可以定义一个变量来接收该内容
prompt( )函数的返回值是String类型的;可能需要转换。

switch 中的比较是全等比较。

向页面中输出:
使用document.write();想要换行可以在字符串中添加

对象的分类:

  1. 内建对象
    由ES标准中定义的对象,在任何的ES的实现中都可以使用
    比如: Math String Number Boolean Function object…
  2. 宿主对象,
    由JS的运行环境提供的对象,目前来讲主要指由浏览器提供的对象
    比如BOM DOM
  3. 自定义对象
    由开发人员自 己创建的对象

对象:
JavaScript中只有一个类Objecti,每一个对象可以单独的添加属性和删除属性。
对象的属性名不强制要求遵守标识符的规范
如果要使用特殊的属性名,不能采用.的方式来操作
需要使用另一种方式:
语法:对象[“属性名”] = 属性值
使用[ ]这种形式去操作属性,更加的灵活,
在[]中可以直接传递一个变量,这样变量值是多少就会读取那个属性

in运算符

  • 通过该运算符可以检查-个对象中是否含有指定的属性
    如果有则返回true,没有则返回false
  • 语法:
    “属性名” in对象

使用对象字面量,可以在创建对象时,直接指定对象中的属性
语法: {属性名:属性值,属性名:属性值…}

在这里插入图片描述

函数

  • 函数也是一个对象
    函数中可以封装一些功能(代码),在需要时可以执行这些功能(代码)

  • 函数中可以保存一些代码在需要的时候调用

  • 使用typeof检查-个函数对象时, 会返回function

  • 可以将要封装的代码以字符串的形式传递给构造函数(很少使用)
    在这里插入图片描述

使用函数声明来创建一个函数
语法:
function函数名([形参1,形参2… .形参N]){
语句…
}
在这里插入图片描述

使用函数表达式来创建一个函数
在这里插入图片描述

使用函数的注意点:

  • 调用函数时解析器不会检查实参的类型,所以要注意,是否有可能会接收到非法的参数,如果有可能则需要对参数进行类型的检查

  • 调用函数时,解析器也不会检查实参的数量;多余的实参不会被使用;如果实参的数量少于形参的数量,则没有对应实参的形参将是undefined

  • 定义函数时,不需要定义返回值,函数返回什么就是什么。如果return语句,后不跟任何值就相当于返回一个undefined,如果函数中不写return,则也会返回undefined。

  • 函数也是一个对象、

  • 立即执行函数
    函数定义完,立即被调用,这种函数叫做立即执行函数。
    在这里插入图片描述

  • 对象的属性值也可以是一个函数
    在这里插入图片描述

枚举对象中的属性
使用for … in语句
语法:
for(var变量in对象){
}
for. . .in语句对象中有几个属性,循环体就会执行几次;每次执行时,会将对象中的一个属性的名字服值给变量

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

作用域

作用域指一个变量的作用的范围

在JS中一 共有两种作用域:

  1. 全局作用域
    • 直接编写在script标签中的IS代码,都在全局作用域
    • 全局作用域在页面打开时创建,在页面关闭时销毁
    • 在全局作用域中有一一个全局对象window,
      它代表的是一 一个浏览器的窗口, 它由浏览器创建我们可以直接使用

在全局作用域中:

  • 创建的变量都会作为window对象的属性保存
  • 创建的函数都会作为window对象的方法保存
  1. 函数作用域
  • 调用函数时创建函数作用域,函数执行完毕以后,函数作用域销毁
  • 每调用一次函数就会创建一个新的函数作用域, 他们之间是互相独立的
  • 在函数中要访问有相同变量名的全局变量可以使用window对象
  • 义形参就相当于在函数作用域中声明了变量

变量的声明提前

  • 使用var关键字声明的变量,会在所有的代码执行之前被声明,
  • 但是如果声明变量时不适用var关键字,则变量不会被声明提前

函数的声明提前

  • 使用函数声明形式创建的函数function 函数(){}
    它会在所有的代码执行之前就被创建,所以我们可以在函数声明前来调用函数
  • 使用函数表达式创建的函数,不会被声明提前,所以不能在声明前调用

this:
解析器在调用函数每次都会向函数内部传递进一个隐含的参数,
这个隐含的参数就是this,thi s指向的是一一个对象,
这个对象我们称为函数执行的.上下文对象

根据函数的调用方式的不同,this会指向不同的对象

  1. 以函数的形式调用时,thi s永远都是window
  2. 以方法的形式调用时,thi s就是调用方法的那个对象
  3. 当以构造函数的形式调用时,thi s就是新创建的那个对象

构造函数:

构造函数就是一一个普通的函数,创建方式和普通函数没有区别,不同的是构造函数习惯上首字母大写
构造函数和普通函数的区别就是调用方式的不同
普通函数是直接调用,而构造函数需要使用new关键字来调用

在这里插入图片描述

构造函数的执行流程:

  1. 立刻创建一个新的对象
  2. 将新建的对象设置为函数中this,在构造函数中可以使用thi s来引用新建的对象
  3. 逐行执行函数中的代码
  4. 将新建的对象作为返回值返回

使用同一个构造函数创建的对象,我们称为一类对象,也将一个构造函数称为一个类。相比于Java,就是用定义构造函数代替定义类。

instanceof关键字:

使用instanceof可以检查-个对象是否是-一个类的实例
语法:
对象instanceof构造函数
如果是,则返回true,否则返回false
在这里插入图片描述
所以任何对象和Object左instanceof检查时都会返回true

想要所有对象共享一个函数,可以定义全局函数变量。

原型 prototype

  • 我们所创建的每一个函数, 解析器都会向函数中添加一个属性prototype
    这个属性对应着一个对象,这个对象就是我们所谓的原型对象

  • 如果函数作为普通函数调用prototype没有任何作用
    当函数以构造函数的形式调用时,它所创建的对象中都会有一个隐含的属性,
    指向该构造函数的原型对象,我们可以通过___ proto__ 来访问该属性

在这里插入图片描述

  • 原型对象就相当于一个公共的区域,所有同一个类的实例都可以访问到这个原型对象,
    我们可以将对象中共有的内容,统一设置到原型对象中
    在这里插入图片描述

  • 当我们访问对象的一个属性或方法时,它会先在对象自身中寻找,如果有则直接使用,

  • 使用in检查对象中是否含有某个属性时,如果对象中没有但是原型中有,也会返回true
    可以使用对象的hasOwnProperty( )来检查对象自身中是否含有该属性
    如果没有则会去原型对象中寻找, 如果找到则直接使用
    原型对象也是对象,所以它也有原型,
    当我们使用一个对象的属性或方法时,会现在自身中寻找,
    自身中如果有,则直接使用,
    如果没有则去原型对象中寻找,如果原型对象中与,则使用,
    如果没有则去,原型的原型中寻找,直到找到Object对象的原型,
    Object对象的原型没有原型,如果在0bject中依然没有找到,则返回undefined

垃圾回收机制(GC)

  • 在JS中拥有自动的垃圾回收机制,会自动将这些垃圾对象从内存中销毁,我们不需要也不能进行垃圾回收的操作
  • 我们需要做的只是要将不再使用的对象设置null即可

数组(Array)

数组也是一个对象
它和我们普通对象功能类似,也是用来存储一些值的

  • 不同的是普通对象是使用字符串作为属性名的,
    而数组时使用数字来作为索引操作元素

索引:

  • 从0开始的整数就是索引
  • 数组的存储性能比普通对象要好,在开发中我们经常使用数组来存储一些数据

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

使用数组的注意事项:

  • 对于连续的数组,使用length可以获取到数组的长度(元素的个数)
    对于非连续的数组,使用length会获取到数组的最大的索引+1

  • 修改length
    如果修改的1ength大于原长度,则多出部分会空出来丫
    如果修改的1ength小于原长度,则多出的元素会被删除

  • 数组中可以放任意类型

数组的常用方法
  • push()
    该方法可以向数组的末尾添加一一个或多个元素,并返回数组的新的长度;可以将 要添加的元素作为方法的参数传递,这样这些元素将会自动添加到数组的末尾。

  • pop( )
    该方法可以删除数组的最后一个元素,并将被删除的元素作为返回值返回。

  • unshift( )
    向数组开头添加一个或多个元素,并返回新的数组长度。

  • shift( )
    可以删除数组的第一个元素 ,并将被删除的元素作为返回值返回。

  • forEach( )
    IE8以上支持
    方法需要-一个函数作为参数
    像这种函数,由我们创建但是不由我们调用的,我们称为回调函数
    数组中有几个元素函数就会执行几次,每次执行时,浏览器会将遍历到的元素
    以实参的形式传递进来,我们可以来定义形参,来读取这些内容
    浏览器会在回调函数中传递三个参数:
    第一个参数,就是当前正在遍历的元素
    第二个参数,就是当前正在遍历的元素的索引
    第三个参数,就是正在遍历的数组
    在这里插入图片描述

  • slice()
    可以用来从数组提取指定元素
    该方法不会改变元素数组,而是将截取到的元素封装到一个新数组中返回
    参数:
    1.截取开始的位置的索引,包含开始索引
    2.截取结束的位置的索引,不包含结束索引
    第二个参数可以省略不写,此时会截取从开始索引往后的所有元素
    索引可以传递一个负值,如果传递一一个负值,则从后往前计算

  • splice()
    可以用于删除数组中的指定元素
    使用splice( )会影响到原数组,会将指定元素从原数组中删除
    并将被删除的元素作为返回值返回
    参数:
    第一个,表示开始位置的索引
    第二个,表示删除的数量
    第三个及之后的参数:
    可以传递一些新的元素,这些元素将会自动插入到开始位置索引前边

  • concat( )
    可以连接两个或多个数组,并将新的数组返回
    该方法不会对原数组产生影响

  • join()
    该方法可以将数组转换为一个字符串
    该方法不会对原数组产生影响,而是将转换后的字符串作为结果返回
    在join( )中可以指定-个字符串作为参数,这个字符串将会成为数组中元素的连接符
    如果不指定连接符,则默认使用,作为连接符

  • reverse ( )
    该方法用来反转数组(前边的去后边,后边的去前边)
    该方法会直接修改原数组

  • sort()
    即使对于纯数字的数组,使用sort( )排序时,也会按照Uni code编码来排序,
    所以对数字进排序时,可能会得到错误的结果。
    我们可以在sort( )添加一个回调函数,来指定排序规则,
    回调函数中需要定义两个形参,
    浏览器将会分别使用数组中的元素作为实参去调用回调函数
    使用哪个元素调用不确定,但是肯定的是在数组中a一定在b前边
    浏览器会根据回调函数的返回 值来决定元素的顺序,
    如果返回一个大于0的值,则元素会交换位置
    如果返回一个小于θ的值,则元素位置不变
    如果返回一个日,则认为两个元素相等,也不交换位置

在这里插入图片描述

  • call( )和app1y()
    这两个方法都是函数对象的方法,需要通过函数对象来调用
    当对函数调用call( )和apply( )都会调用函数执行
    在调用call( )和apply( )可以将一一个对象指定为第一个参数
    此时这个对象将会成为函数执行时的this
    两个方法的区别:
    call( )方法可以将实参在对象之后依次传递
    apply()方法需要 将实参封装到一个数组中统一传递
    在这里插入图片描述

封装实参的对象arguments

在调用函数时,浏览器每次都会传递进两个隐含的参数:

  1. 函数的上下文对象this
  2. 封装实参的对象arguments

arguments是一个类数组对象,它也可以通过索引来操作数据,也可以获取长度
在调用函数时,我们所传递的实参都会在arguments中保存
arguments . length可以用来获取实参的长度
我们即使不定义形参,也可以通过arguments来使用实参,只不过比较麻烦
arguments[e]表示第 一个实参
arguments[1]表示第二个实参

它里边有一个属性叫做callee,
这个属性对应一个函数对象,就是当前正在指向的函数的对象

JavaScript中的基本类型是否是对象?

  • 方法和属性能添加给对象,不能添加给基本数据类型
    当我们对一些基本数据类型的值去调用属性和方法时,
    浏览器会临时使用包装类将其转换为对象,然后在调用对象的属性和方法。
  • 所以基本数据类型并不是对象,只是可以通过装箱的方法转换为对象,
    在这里插入图片描述

JavaScript中使用正则表达式

创建正则表达式的对象

语法:
var变量= new RegExp( “正则表达式” , “匹配模式”) ;
第二个参数可以没有
使用typeof检查正则对象,会返回object
在构造函数中可以传递一个匹配模式作为第二 个参数,可以是
i 忽略大小写
g 全局匹配模式
m 执行多行匹配
在这里插入图片描述
使用字面量来创建正则表达式
语法:
var变量= /正则表达式/匹配模式
在这里插入图片描述

正则表达式的方法:

  • test( )
    使用这个方法可以用来检查一 个字符串是否符合正则表达式的规则,如果符合则返回true,否则返回false
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逍遥自在”

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值