JavaScript-核心JS

js就是在装修好的房子里进行动态设置

一、js的由来

全称JavaScript,但与java无关

网景公司开发

最初开发的目的:本地表单验证。用于增加客户体验好感度,减少客户端等待时间,减少服务器端压力

二、组成

1.核心js:ECMAScript5(在linux上使用)
2.bom:browser object model浏览器对象模型
3.dom:document object model文档对象模型

兼容性:核心js兼容性较佳,dom和bom兼容性相对较差

三、特点

1.弱类型语言
即对类型要求不严格,在定义一个变量后,还可以重新定义,进而可以改变其的值和数据类型
java是典型的强类型语言,即对类型要求很严格

2.脚本语言
本身具有逻辑能力和行为能力

3.解释性语言
需要被js解析器解析执行

浏览器:内置js解析器
node:js运行环境。相当于封装了js解析器(Google v8)

检测node版本号:node --version

node运行方式
1.repl环境
r:read
e:eval执行
p:print打印
l:loop循环

2.node命令
node a.js直接执行

大部分第三方软件安装在/opt或/opt/bin下,比如说node

4.从上到下按照解析顺序依次执行
代码书写顺序不一定是解析顺序
console.log(a);
var a=10;

解析:
var a;
console.log(a);
a=10;

优先解析函数声明,然后解析使用var操作符声明的变量☆

举例:
代码顺序:(按理说这样的顺序应该报错,因为你不能还没有say就function say,但可以执行,原因如上)
say();
function say(){}

解析顺序:
function say(){}
say();

执行顺序:
function say(){}
say();

5.大小写敏感的语言
html大小写不敏感
css大小写敏感

四、语法

1.变量的声明
1.标识符的声明

  • 由字母、数字、下划线以及$组成

  • 不能以数字开头
    var 2a="" //error
    var a2="" //success

  • 建议大家使用驼峰式命名
    var firstnameandlastname=’ ’
    从第二个单词开始首字母大写
    var firstNameAndLastName=’ ’
    建议语义化命名

  • 不能使用关键字和保留字
    关键字:在js中具有特殊意义的字符
    保留字:未来有可能成为关键字的字符

2.变量的声明
es5:
var a;//声明一个a变量但不赋值
a=“hello”;//获取a变量并赋值hello

var b=“hello”;//变量的声明并赋值

c=“hello”;//变量的声明并赋值
c;//这样只声明不赋值是不行的

var a=2,b=3,c=4;//同时给多个变量声明并赋值

es6:
let:
使用了let声明的变量,只能声明一次,不能重复声明

不能解析提升

局部变量(只在当前作用域内有效)

const:
一般用来声明常量,一旦声明,不可修改
使用const声明的常量,只能声明一次 ,不能重复声明

不能解析提升

局部变量(只在当前作用域内有效)

如果常量值为引用数据类型,只要引用地址不变,可以修改内部属性

局部变量

let oo=20;
function say(){
   
	console.log(oo);//能够打印出结果20
}
say();
----------------------------------------------------------------
let oo=20;
function say(){
   
	let obj1='obj1';
	console.log(obj1,'inner');//能够打印出结果obj1 inner
}
say();
console.log(obj1,'outer');//无法被打印出,显示obj1 is not defined

即全局的可以拿到局部去用,而局部的是不能拿到全局去用的

2.注释
//:单行数值

/**/:多行注释

3.语句
建议每一行语句结束使用;结尾

五、使用

1.浏览器中html
1.嵌入在html标签内部
使用script标签来嵌入

<head>
	<script type="text/javascript">
		var a=10;
		console.log(a);
	</script>
</head>

2.外部引入脚本(js代码理论上可以写在html任何位置,但需要考虑解析顺序,但建议写在head中。head中就专门写第三方文件的。)
script标签:src属性

<head>
	<script src="./1.js"></script>
</head>

<!--使用了scr属性的script标签,内部的标签会被解析器忽略,即不报错也不执行-->
<!--使用了src属性的script标签内部不能写东西啦!-->

全局变量:window

2.node
repl环境
node命令
1.创建一个js文件,以.js为文件名后缀即可
2.执行node 文件名.js

全局变量:global

六、局部变量和全局变量

1.什么是?
全局变量:可以在所有js作用域内访问的变量
局部变量:只能在局部作用域内访问的变量
2.如何声明?
局部变量:
let
const
使用了var操作符并声明在函数内部

<head>
	<script type="text/javascript">
		var a=10;
		console.log(a,'top');<!--能够被打印-->
		function say(){
    
			console.log(a,'say');<!--能够被打印-->
		}
		console.log(a,'bottom');<!--能够被打印-->
	</script>
</head>
<head>
	<script type="text/javascript">
		function say(){
    
			var a=10;
			console.log(a,'say');<!--能够被打印-->
		}
		console.log(a,'bottom');<!--不能够被打印-->
	</script>
</head>
<head>
	<script type="text/javascript">
		function say(){
    
			a=10;
			console.log(a,'say');<!--能够被打印-->
		}
		console.log(a,'bottom');<!--能够被打印-->
	</script>
</head>
function say(){
   
	console.log(a);
	a=10;
	console.log(a);
}
say();

该代码会报错,因为函数只有在被调用时其内部变量才会被声明,要想代码正常运行可将其改为

function say(){
   
	a=10;
	console.log(a);
}
say();
console.log(a);

七、数据类型

共有六种数据类型

typeof(a)用于测试数据类型
返回值:(即测出的a变量的数据类型)
undefined
object(null+object)
number
Boolean
string
function(function)

typeof typeof(a)
返回值类型:
string

在这里插入图片描述

五种基本数据类型(简单数据类型)存在于栈区

undefined:未定义类型
var a;//声明一个变量而不赋值时此时变量的数据类型为undefined,值也为undefined
var a=undefined;//直接赋值undefined,此时数据类型与值均为undefined
console.log(a);//直接打印一个既不声明也不赋值的变量,数据类型也为undefined,没有值

null:空引用数据类型(即将指向堆区,但此时没有指向堆区)
var a=null;

undefined派生自null
null==undefined:true(等等比较)

null===undefined:false(全等比较)

null类型虽然是空的,但却占据空间位置

number:数值类型
10十进制
10.3浮点数
011二进制
八进制
0xa十六进制
NaN:not a number
Infinity:无穷

isNaN(a):是不是不是一个数
当a不是一个数时,返回true:是的,它不是一个数
当a是一个数时,返回false:不是,它是一个数

isFinite(a):是否为无穷苏
false:a是一个无穷数
true:a不是一个无穷数

Boolean:布尔类型
true:
false:

string:字符串类型
使用单引号、双引号或反引号包裹的字符

一种引用数据类型(复杂数据类型)存在于堆区

object:

  • function

  • array数组
    var arr=new Array();
    arr.valueOf();

  • date

共有的属性和方法:
constructor属性:构造者

toString()方法:将当前变量转换为字符串类型
每一种子类调用toString的返回值不一定一样

vlaueOf()方法:返回当前变量的原始值/实际值
每一种子类调用valueOf的返回值不一定一样

引用数据类型声明方法:

var obj={
   
	name='lisi',
	age=20
}
var obj=new Object();
obj.name='lisi';
obj.age=20;

只要一见到new,就要在堆区中新开辟一块内存空间

八、数据类型转换

null和undefined不参与转换(它们可以往其他数据类型转换,但其它数据类型不太好往它俩转)

number

*—>number

1.Number(a):number转换函数,a即为想要被转换的变量

null转换结果为0
undefined转换结果为NaN
true转换结果为1
false转换结果为0
string(空、非空、数字)
    空字符串“”转换结果为NaN
    非空字符串
         空格字符 转换结果为NaN
         字符 转换结果为NaN
         数字 转换结果为number类型的对应数字
         既有数字又有字符 转换结果为NaN
         “10l”转换结果为NaN
         “a10”转换结果为NaN
          “+10” 转换结果为number类型的对应数字
          “10.3” 转换结果为10.3

2.parseInt(a):解析整型

null转换结果为NaN
undefined转换结果为NaN
true转换结果为NaN
false转换结果为NaN
string(空、非空、数字)
    空字符串“”转换结果为NaN
    非空字符串
         空格字符 转换结果为NaN
         字符 转换结果为NaN
         数字 转换结果为number类型的对应数字
         既有数字又有字符
         “10l”转换结果为number类型的对应数字(从前到后依次解析,碰到字符就停止)
         “a10”转换结果为NaN
          “+10” 转换结果为number类型的对应数字
          “10.3” 转换结果为整数,直接舍弃小数点后的数

3.parseFloat(a):解析浮点型

null转换结果为NaN
undefined转换结果为NaN
true转换结果为NaN
false转换结果为NaN
string(空、非空、数字)
    空字符串“ ”转换结果为NaN
    非空字符串
         空格字符 转换结果为NaN
         字符 转换结果为NaN
         数字 转换结果为number类型的对应数字
         既有数字又有字符
         “10l”转换结果为number类型的对应数字(从前到后依次解析,碰到字符就停止)
         “a10”转换结果为NaN
          “+10” 转换结果为number类型的对应数字
          “10.3” 转换结果为小数

一元运算符

+a:相当于调用了Number(a)

-(-a):相当于调用了Number(a)

Boolean

Boolean(a)

*—>Boolean
null转换结果为false
undefined转换结果为false
零 转换结果为false
非零 转换结果为true
string(空、非空、数字)
    空字符串“ ”转换结果为false
    非空字符串 转换结果为true

对一个变量连用两次逻辑非

相当于将当前变量转换为Boolean类型
!!null:false

string

*—>string

1.String(a) string转换函数

null:“null”
undefined:“undefined”
false:“false”
任何参数的转换都相当于直接在变量值之外添加双引号或单引号

2.toString(num) 方法

null和undefined没有toString()方法
num:进制数
a.toString(2):代表先将当前a变量转换为2进制的number数,再 所以前面这个变量必须是本身就能够转换为number值的

true.toString():“true”
10.toString(2):“10”
10.toString(2):1010

九、值传递问题

基本数据类型的值传递

问题:
	var a=10;
	a=b;//b没有生命也没有赋值。应为b=a;
	b=b+1;
	console.log(a);
	console.log(b);

结果:undefined undefined
修改后结果:10 11

引用数据类型的值传递

问题:
	var obj1={
   
		name:'lisi',
		age:20
	}
	obj1=obj2;//同上的错误,应为obj2=obj1;
	obj2.name='terry';
	console.log(obj1.name);
	console.log
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值