一天学完JavaScript(上)

234 阅读10分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第7天,点击查看活动详情

1、语句和标识符

在html中通过script标签嵌入js语句

声明变量:var

标识符是由:字母、美元符号($)、下划线(_)和数字组成,其中数字不能开头

<script>
  var num = 10;
</script>

2、javascript引入方式

1、嵌入到html文件

2、引入本地独立js文件

<body>
<script src="./hello.js"></script>
</body>

3、引入网络来源文件

<body>
<script src="http://code.jquery.com/jquery1.2.1.min.js"></script>
</body>

\

3、变量

变量声明:var

变量打印:console.log(变量名)

在控制台的console中可以查看

变量提升:JavaScript引擎的工作方式是,先解析代码,获取所有被声明的变量,然后再一行一行地运行。这造成的结果,就是所有的变量的声明语句,都会被提升到代码的头部,这就叫做变量提升(hoisting)。

如:

<script>
  console.log(num);
  var num = 10;
</script>

结果不会报错,但是会提示undefined,因为以上代码实际上等于:

<script>
  var num;
  console.log(num);
  vnum = 10;
</script>

这个现象叫变量提升

4、数据类型

共有6种数据类型:数值、字符串、布尔值、null、对象、undefined

PS:es6新增第七种symblo类型和第八种biglnt类型

字符串类型:

被单引号或双引号包裹的值就是字符串类型

布尔类型:

0:false 1:true

var flag = true;
var flag = false;

对象:

也叫做引用数据类型,合成数据类型。复合数据类型,可以包含上述三种原始数据类型

var user{
  age:18,
    name:"iwen",
      hunyin:false,
}

null和undefined代表没有值或者空值。

null一般代表对象为“没有”

undefined一般代表数值为“没有”

5、typeof运算符

可以用来检测数据类型

数值返回number

typeof 123//"number"

字符串返回string

typeof'123//"string"

布尔类型返回boolean

typeof false//"boolean"

对象返回object

typeof{}//"object"

6、算数运算符

6.1布尔运算符取反

!true//false

!false//true

6.2非布尔值取反

对于非布尔值,取反运算符会将其转为布尔值。可以这样记忆,以下六个值取反后为true,其他值都为false。

7、continue语句

continue语句用于立即终止本轮循环,返回循环头部,开始下一轮循环

8、字符串

单引号字符串的内部可以使用双引号。双引号字符串的内部可以使用单引号

如果要在单引号字符串的内部,使用单引号,就必须在内部的单引号前面加上反斜杠,用来转义。双引号字符串内部使用双引号,也是如此

'Did she say 'Hello'?'
//"Did she say 'Hello'?"


"Did she say "Hello"?"
//"Did she say "Hello"?"

8.1charAt方法

返回指定位置的字符,参数是从0开始编号的

var s = new String('itbaizhan');
s. charAt(1)//"t"
s. charAt(s.length - 1)//"n"

如果参数为负数,或大于等于字符串的长度,charAt返回空字符串

8.2concat方法

concat方法用于链接两个字符串,返回一个新字符串,不改变原字符串

var s1 = 'itbaizhan'; 
vars2 = 'sxt';
s1. concat(s2)//"itbaizhansxt"
s1//"itbaizhan"

该方法可以接受多个参数

'sxt'.concat('itbaizhan','bjsxt')//"sxtitbaizhanbjsxt"

如果参数不是字符串,concat方法会将其先转换为字符串然后再连接

ps

字符串相加可以不用concat,可以直接使用+连接字符串,但是需要注意相加时有可能不是字符串类型导致相加出错,而concat则不用担心这个问题

8.3substring

substring 方法用于从原字符串取出子字符串并返回,不改变原字符串。它的第一个参数表示子字符串的开始位置,第二个位置表示结束位置(返回结果不含该位置)

'itbaizhan'.substring(0,2)//"it"

如果省略第二个参数,则表示子字符串一直到原字符串的结束

'itbaizhan'.substring(2)//"baizhan"

如果第一个参数大于第二个参数,substrimg方法会自动更换两个参数的位置

'itbaizhan'.substring(92//"baizhan"
//等同于
'itbaizhan'.substring(29//"baizhan"

如果参数使负数,substring方法会自动将负数转为0

'itbaizhan'.substring(-3)//"itbaizhan"
'itbaizhan'.substring(2,-3)//"it" 

8.4 substr

substr方法用于从原字符串取出子字符串并返回,不改变原字符串,跟substring 方法的作用相同

substr方法的第一个参数是子字符串的开始位置(从0开始计算),第二个参数是子字符串的长度

如果省略第二个参数,则表示子字符串一直到原字符串的结束

'itbaizhan'.substr(2)//"baizhan"

如果第一个参数是负数,表示倒数计算的字符位置。如果第二个参数是负数,将被自动转为0,因此会返回空字符串

'itbaizhan'.substr(-7)//"baizhan"
'itbaizhan'.substr(4,-1)//""

8.5indexof

indexof方法用于确定一个字符串在另一个字符串中第一次出现的位置,返回结果是匹配开始的位置。如果返回-1,就表示不匹配

' hel1o world'. indexof('o')//4
' itbaizhan'. indexof(' sxt')//-1

indexof 方法还可以接受第二个参数,表示从该位置开始向后匹配

' he11o world'. indexof('o',6)//7

8.6 trim

trim方法用于去除字符串两端的空格,返回一个新字符串,不改变原字符串

' hello world '. trim()
//"hello world"

该方法去除的不仅是空格,还包括制表符(\t、\v)、换行符(\n)和回车符(\r)

'\r\ nitbaizhan \t'. trim()//'itbaizhan'

ES6扩展方法,trimEnd()和trimStart()方法

" itbaizhan ". trimEnd();// itbaizhan 
" itbaizhan ". trimstart();//itbaizhan

8.7 split

split方法按照给定规则分割字符串,返回一个由分割出来的子字符串组成的****

'it|sxt|baizhan'.split('|')//["it","sxt","baizhan"]

如果分割规则为空字符串,则返回数组的成员是原字符串的每一个字符。

'a|b|c'.split('')//["a","|","b","|","c"]

如果省略参数,则返回数组的唯一成员就是原字符串

'itlsxtlbz'.split()//[itlsxtlbz]

spit方法还可以接受第二个参数,限定返回数组的最大成员数。

'it|sxt|bz'.split('|',0)//[]
'itlsxtlbz'.split('|',1)//["it"]
'it|sxt|bz'.split('|',2)//["it","sxt"]
'it|sxt|bz'.split('|',3)//["it","sxt","bz"]
'it|sxt|bz'.split('|',4)//["it","sxt","bz"]

9、数组

9.1 Array.isArray

ArrayisArray 方法返回一个布尔值,表示参数是否为数组。它可以弥补typeof运算符的不足

var arr=["尚学堂”,100,true];
 console.log(typeof arr);//object
var arr=[' sxt',' baizhan','it']; 
Array. isArray(arr)//true

9.2push/pop

push方法用于在数组的未端添加一个或多个元素,并返回添加新元素后的数组长度。注意,该方法会改变原数组

var arr=[];arr.push("尚学堂”)//1
arr.push('itbaizhan')//2
arr.push(true,{})//4
arr//[尚学堂,itbaizhan',true,{}]

pop方法用于删除数组的最后一个元素,并返回该元素。注意,该方法会改变原数组

9.3shift

shit方法用于删除数组的第一个元素,并返回该元素。注意,该方法会改变原数组

shift方法可以遍历并清空一个数组

var 1ist=[1,2,3,4,5,6];
var item; 
while(item= list. shift()){
console.log(item);
}
  list //[]

unshift方法用于在数组的第一个位置添加元素,并返回添加新元素后的数组长度。注意,该方法会改变原数组

var arr = ['尚学堂','itbaizhan','WEB前端'];
  arr.unshift('baizhan');//4
arr//['baizhan','尚学堂','itbaizhan','WEB前端']

9.4 join

join方法以指定参数作为分隔符,将所有数组成员连接为一个字符串返回。如果不提供参数,默认用逗号分隔

var a=[1,2,3,4]; 
a. join('')//'1234'
a. join('|')//"1|2|3|4"
a. join()//"1,2,3,4"

如果数组成员是undefined或null或空位,会被转成空字符串

数组的join配合字符串的split可以实现数组与字符串的互换

var arr=["a","b","c"]; 
var myArr=arr. join("");
console.log(myArr); //转字符串
console.log(myArr. split("  "));//转回数组

9.5concat

concat方法用于多个数组的合并。它将新数组的成员,添加到原数组成员的后部,然后返回一个新数组原数组不变

['he11o'].concat(['world'])
//["hello","world"]

['he11o'].concat(['world'],['!'])
//["hello","world","!"]

除了数组作为参数,concat也接受其他类型的值作为参数,添加到目标数组尾部。

[1,2,3].concat(4,5,6)
//[1,2,3,4,5,6]

应用场景:上拉加载,合并数据

9.6reverse

reverse 方法用于颠倒排列数组元素,返回改变后的数组。注意,该方法将改变原数组

var a=['a','b','c'];
a. reverse()//["c","b","a"]
a//["c","b","a"]

9.7 indexof

indexof方法返回给定元素在数组中第一次出现的位置,如果没有出现则返回-1

var arr=['a','b','c']; 
arr. indexof('b')//1
arr. indexof('y')//-1

indexof方法还可以接受第二个参数,表示搜索的开始位置

['尚学堂','百战程序员''itbaizhan'].indexof('尚学堂',1)//-1

10、函数

function 命令:

function命令声明的代码区块,就是一个函数。function命令后面是函数名,函数名后面是一对圆括号,里面是传入函数的参数。函数体放在大括号里面。

function print(s){
  console.1og(s);
}

函数名提升:

JavaScript引擎将函数名视同变量名,所以采用function命令声明函数时,整个函数会像变量声明一样,被提升到代码头部

add(); 
function add(){}

函数返回值:

JavaScript函数提供两个接口实现与外界的交互,其中参数作为入口,接收外界信息;返回值作为出口,把运算结果反馈给外界

function getName(name){
return name;
}
var myName=getName("itbaizhan")
console.log(myName);//itbaizhan

ps:return后面不能再加任何代码,因为不会生效

11、对象

对象是一组键值对(key-value)的集合,是一种无序的复数数据集合

var user = {
name:'itbaizhan',
  age:'13'
}

对象的每一个键名又称为“属性”(property),它的“键值”可以是任何数据类型。如果一个属性的值为函数,通常把这个属性称为“方法”,它可以像函数那样调用

var user={
  name:"itbaizhan",
  age:13, 
  jobs:["itbaizhan","sxt"], 
  flag: true, 
  getName: function(){
    console.1og("iwen");
  }
  container:{
    frontEnd:"WEB前端"backEnd:["python""java"]
}
}
function getName(){}
//链式调用
console.log(user.container.frontEnd);

\

11.1数学对象

Math是JS的原生对象,提供各种数学功能

11.1.1math.abs()

返回参数值的绝对值

Math.abs(1)//1
Math.abs(-1)//1

11.1.2math.max(),math.min()

Math.max方法返回参数之中最大的那个值,Math.min返回最小的那个值。如果参数为空,Math.min 返回Infinity,Math.max 返回-Infinity。

Math. max(2,-1,5)//5
Math. min(2,-1,5)//-1
Math. min()//Infinity 
Math. max()//-Infinity

11.1.3Math.floor,Math.ceil(),Math.round()

Math.floor 方法返回小于参数值的最大整数

Math.ceil 方法返回大于参数值的最小整数

Math.round 方法返回参数值四舍五入的整数

Math.floor(3.2)//3
Math.floor(-3.2)//-4

Math.ceil(3.2)//4
Math.ceil(-3.2)//-3

11.1.4Math.random()

Math.random()返回0到1之间的一个伪随机数,可能等于0,但是一定小于1

console.log(Math.random());

任意范围的随机数生成函数如下:

 function getRandomArbitrary(min, max){
    return Math. random()*(max-min)+min; 
 }

getRandomArbitrary(5,10)

11.2Date对象

Date 对象是JavaScript原生的时间库。它以1970年1月1日00:00:00作为时间的零点,可以表示的时间范围是前后各1亿天(单位为毫秒)

11.2.1Date.now()

Date.now 方法返回当前时间距离时间零点(1970年1月1日00::00:00 UTC)的毫秒数,相当于Unix时间戳乘以1000

Date.now();//1635216733395

时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在

的总秒数。

格林威治和北京时间就是时区的不同

Unix是20世纪70年代初出现的一个操作系统,Unix认为1970年1月1日0点是时间纪元。JavaScript也就遵循了这一约束

new Date( ):获取最新时间

11.2.2get系列方法

var d=new Date(' January 6,2022'); 
d. getDate()//6
d. getMonth()//0
d. getYear()//122
d. getFu1lYear()//2022

编写函数获得本年度剩余天数:

function leftDays(){
var today=new Date(); 
  var endYear=new Date(today. getFullYear(),11,31,23,59,59,999);
  var msPerDay=24*60*60*1000; 
  return Math. round((endYear. getTime()-today. getTime())/msPerpay);
}