Javascript知识点整理(一)基本数据类型与引用数据类型

<!--JS代码需要编写到script标签中-->
<script type="text/javascipt">
//控制浏览器窗口弹出一个警告框
alert('警告框!')
//让计算机在页面中输出一个内容,document.write()的作用就是向body中写一个内容
document.write('你好~')
//console.log()的作用是向控制台输出一个内容
console.log('111')
</script>
<body>
//可以将js代码编写到标签的onclick属性中,当我们点击按钮时,js代码才会执行
  <button onclick="alert('讨厌,你点我干嘛')">点我一下</button>
  //可以将js代码写在超链接的href属性中,这样点击超链接时会执行js代码
  <a href="javascript:alert('让你点你就点!');">点我一下</a>
  <a href="javascript:;">你也点我一下</a>  //空内容
</body>

上面一段代码虽然可以将js代码写在标签属性中,但是他们属于行为耦合,不方便维护,不推荐使用。
可以将js代码编写到外部js文件中,然后通过script标签引入,写道外部文件中可以在不同的页面中同时引用,也可以利用到浏览器的缓存机制,推荐使用。

<script type="text/javascript" src="外部js文件的路径"></script>

script标签一旦用于引入外部文件了,就不能再编写代码了,即使写了浏览器也会忽略,如果需要则再创建一个新的script标签用于编写内部代码。

  • JS中严格区分大小写!
  • JS中每一条语句以分号(;)结尾,如果不写分号,浏览器会自动添加,但是会消耗一些系统资源,在开发中必须写
  • JS中会忽略多个空格和换行

字面量:都是一些不可改变的值,比如:1 2 3 4 5,字面量都是可以直接使用
变量:x=123435688
//声明变量 ,在js中使用var关键字来声明一个变量 var a=123
在JS中一共有六种数据类型:
String 字符串
Number 数值
Boolean 布尔值
Null 空值
Undefined 未定义
object 对象
其中String Number Boolean Null Undefined属于基本数据类型,而object属于引用数据类型
基本数据类型和引用数据类型:
存储上的区别:
基本数据类型是存放在栈中的简单数据段
引用数据类型是存放在堆内存中的对象,在栈内存中存放的是堆内存中具体内容的引用地址,通过这个地址可以快速查找到对象。
值比较上的区别:
基本数据类型的比较就是值与值的比较,看起来相同就是相同

var a=1,
var b=1,
console.log(a==b)// true

引用数据类型的比较是地址的比较,即他们保存在栈内存中的指向堆内存的地址是否相同,虽然看起来一样,但是指向的地址是不相同的,所以是不相等。

var a={}
var b={}
console.log(a==b)//false

赋值上的区别
基本类型的赋值是简单赋值,如果一个变量向另一个变量赋值基本类型的值。会在变量上创建一个新值,然后把这个值赋值到新变量分配的位置上。

var a=1;
var b=a;
a++;
console.log(a)//2
console.log(b)//1
//a,b两个变量的值都不会互相受到影响。

引用类型的赋值是对象引用

var a={},
var b=a
a.name='zs'
console.log(a.name)//zs
console.log(b.name)//zs
b.age=16
console.log(a.age)//16
console.log(b.age)//16

深拷贝,浅拷贝?
浅拷贝是针对指针的拷贝,拷贝后两个指针指向同一个内存空间,

var a={x:1}
var b=a
console.log(b)//{x:1}
b.x=2
console.log(a)//{x:2}
console.log(b)//{x:2}

浅拷贝就是传址,当把a的值赋值给b的时候同时也把a的址赋值给了b,当b(a)发生改变的时候,a(b)的值也发生改变。

深拷贝不仅对指针进行拷贝还要对指针指向的内容进行拷贝,经过深拷贝的指针是指向两个不同地址的指针。拷贝结束后虽然两者的值是一样的,但是其内存不一样,两个对象互不影响,互不干扰。
深拷贝的几种方法:
(1)JSON内置的方法

var a={x:2}
var b=JSON.parse(JSON.stringfiy(a))
console.log(b)//{x:2}
b.x=3
console.log(a)//{x:2}
console.log(b)//{x:3}

原理:使用JSON.stringfiy()方法将js对象或者值转换为字符串,JSON.parse()方法是将json格式的字符串转化为对象的时候,会自己去构建新的内存地址去存放数据。
(2)Object内置的方法 assign

var a={x:1}
var b=Object.assign({},a)
console.log(b)//{x:1}
b.x=2
console.log(a)//{x:1}
console.log(b)//{x:2}

原理:该方法是用Object.assign对对象进行拼接, 将后续对象的内容插入到第一个参数指定的对象,不会修改第一个参数之后的对象,而我们将第一个对象指定为一个匿名空对象,实现深拷贝。
(3)递归实现 略
转译
" 表示 "
’ 表示 ’
\n 表示换行
\t 表示制服表
\ 表示\

数据类型:
在JS中一共有6中数据类型
String(字符串)
Number(数值)
Boolean(布尔值)
Null(空值)
Undefined(未定义)
object(对象)
其中string、number、Boolean、null、undefined5种是基本数据类型,object是引用数据类型,null这个值专门用来表示用一个为空的对象,使用typeof检查一个null值时,会返回一个object,当声明一个变量,但是不给该变量赋值的时候,它的值就是undefined ,使用typeof检查一个undefined时,也会返回undefined

var a
console.log(a)//undefined
var b=undefined
console.log(typeof b)//undefined

强制类型转换
指将一个数据类型强制转换为其他的数据类型,类型转换主要是指,将其他的数据类型转换为String Number Boolean。
将其他的数据类型转换为String
方式一:
调用被转换数据类型的toString()方法,该方法不会影响原变量,它会将转换的结果返回,但是要注意,null和undefined这两个值没有toString()方法。

var a=123;
//调用a的toString()方法
a.toString();
console.log(typeof a);//number
console.log(a);//123
//将a.toString()赋值给新变量b
var b=a.toString();
console.log(typeof b);//string
console.log(b);//"123"

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

var a=123
//调用String()函数,来将a转换为字符串
a=String(a)
console.log(a)//"123"
console.log(typeof a)//string
a=null
a=String(a)
console.log(a)//"null"
console.log(typeof a)//string
a=undefined
a=String(a)
console.log(a)//"undefined"
console.log(typeof a)//string

将其他数据类型转换为Number
方式一:
使用Number()函数
字符串—>数字

  1. 如果是纯数字的字符串,则直接将字符串转换为数字
  2. 如果含有非数字的内容,则转换为NaN
  3. 如果字符串是一个空串或者是一个全是空格的字符串,则转换为0、
var a="123"
console.log(typeof a)//string
console.log(a)//"123"
//调用Number()函数将a转换为Number类型
a=Number(a)
console.log(typeof a)//number
console.log(a)//123

var a="abc"
a=Number(a)
console.log(typeof a)//number
console.log(a)//NaN

布尔—>数字 true转成1 , false转成0
null—>数字 数值为0
undefined—>数字 NaN

var a=true
a=a.Number(a)
console.log(typeof a)//number
console.log(a)//1

a=null
a=a.Number(a)
console.log(typeof a)//number
console.log(a)//0
a=undefined
a=a.Number(a)
console.log(typeof a)//number
console.log(a)//NaN

方式二:
这种方式专门用来对付字符串
parseInt() 把一个字符串转换为一个整数,把一个字符串中的有效的整数内容取出来,然后转换成Number;
parseFloat()把一个字符串转换为一个浮点数,与parseInt()类似,不同的是它可以获得有效的小数

var a="123px"
a=parseInt(a)
console.log(typeof a)//number
console.log(a)//123
a="123a567px"
a=parseInt(a)
console.log(typeof a)//number
console.log(a)//123

a="123.456"
a=parseFloat(a)
console.log(typeof a)//number
console.log(a)//123.456

将其他数据类型转换成Boolean
使用Boolean()函数
数字转布尔,除了0和NaN是false,其余都为true

var a=123;
a=Boolean(a)
console.log(typeof a)//boolean
console.log(a)//true
a=-123 //true
a=0//false
a=Infinity//true
a=NaN//false
//字符串--->除了空串,其余都是true
a="hello"
a=Boolean(a)
console.log(typeof a)//boolean
console.log(a)//true

//null和undefined都是false
a=null
a=Boolean(a)
console.log(typeof a)//boolean
console.log(a)//false
a=undefined//false
//对象也会转换成true

任何值和NaN做运算都得NaN,NaN不和任何值相等,包括它自己。可以通过isNaN()函数来判断一个值是否为NaN
字符串加法:
两个字符串进行加法运算,会做拼串,将两个字符串拼接为一个字符串,并返回。
任何值和字符串相加,会将任何值转换为字符串,然后两个字符串做拼接,运算顺序:从左到右
其余的数值和字符串做运算,都是将字符串变为number
任何数据类型的值前面加上一个加号”+“,都会把该值变为number类型
自增和自减
自增分为两种:后++(a++),前++(++a),a++的值等于原变量的值(自增前的值),++a的值等于原变量的新值(自增后的值)

var c=10;
c++;//11
console.log(c++)//两次c++操作,这是第二次c++,这个c++等于该值对应的原变量(第一次c++)的值,即输出11

var d=20;
++d //21
console.log(++d)//22

var a=20;
var result=a++ + ++a +a
console.log(result)// 64
//a++等于原值,原值为a,即a++等于20,但是此时a=21,++a等于原值+1,即++a=22,此时a相当于加了两次,即此时a=22,所以结果等于 20+22+22=64

var b=20;
b=b++;
console.log(b)//20
//先算b++,b++等于原值即20,再把20赋值给b,所以最终b=20

a++或者a–等于原值
++a或者–a等于新值
&&与运算,两个都为true,返回后面的,两个值都为false,返回前面的false。
Unicode编码
在字符串中使用Unicode编码,\u四位编码(十六进制);
在网页中使用Unicode编码,&#编码;这里的编码是需要使用十进制
条件运算符:
条件运算符也叫三元运算符,语法:
条件表达式?语句1:语句2;
执行流程:条件运算符在执行时,首先对条件表达式进行求值
如果为true,则执行语句1,并返回结果,
如果为false,则执行语句2,并返回结果。
获取a,b中的最大值

var a=30;
var b=40;
var max=a>b?a:b

运算符的优先级

对象
属性名:
如果给对象obj设置特殊的属性名,不能采用.的方式来操作,需要使用另一种方式:语法:对象[属性名]=属性值,使用[]这种形式去操作属性,更加的灵活,在[]可以直接传递一个变量,这样变量值时多少就会读取哪个属性

obj["123"]=789
obj["nihao"]="你好"
var n="123"
console.log(obj[n])// 789

属性值:
JS对象的属性值,可以是任意的数据类型,也可以是一个对象
in 运算符,通过该运算符,可以检查一个对象中是否含有指定的属性,有返回true ,没有返回false
基本数据类型和引用数据类型的区别
JS中的变量都是保存在栈内存中的,基本数据类型的值是直接在栈内存中存储,值与值之间独立存在,修改一个变量不会影响其他的变量。(深拷贝,互相独立),基本数据类型保存的是值
对象(引用数据类型)
对象是保存在堆内存中的,每创建一个新对象,就会在堆内存中开辟一个新空间,而变量保存的是对象的内存地址(对象的引用),如果两个变量保存的是同一个对象的引用,当通过一个变量修改属性时,另一个也会受影响,不是互相独立的(浅拷贝)。引用数据类型保存的是地址

var obj1=new Object()
var obj2=new Object()
obj1.name=123
obj2.name=123
console.log(obj1==obj2)// false
//两个对象的引用地址不相同

当比较两个基本数据类型的值时,就是比较值;
当比较两个引用数据类型时,它比较的是对象的内存地址,如果两个对象是一摸一样的,但是地址不同,也会返回false.
对象字面量
使用字面量来创建对象

var obj={}
//使用对象字面量,可以在创建对象时,直接指定对象中的属性,语法:对象名{属性名:属性值,属性名:属性值......}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值