JavaScript学习笔记

这篇博客介绍了JavaScript的基础知识,包括内部和外部脚本引入,变量定义,注释方式,数据类型的使用,如number、字符串、布尔值、数组和对象。还讲解了字符串的模板语法,数组的操作,对象的创建与属性访问,以及分支和循环结构。此外,还涉及函数定义、参数获取,变量作用域的let和const关键字,以及方法定义。最后提到了Date对象的基本使用。
摘要由CSDN通过智能技术生成

JavaScript引入
内部引入
<script> alert("hello world");</script>
外部引入
<script src="./外部文件"> </script>
定义变量
变量类型+变量名+变量值

注释
单行注释://
多行注释:/** **/

数据类型变量名
变量名的定义:
1.由数字,字母,下划线,美元符号组成
2.以上都可以做首字母
3.特殊字符不可以做变量名



数据类型快速浏览


1,number

整数 123

小数 1.2

科学计数法 1.23e3

负数-3

NaN:not a number

Infinity 表示无限大

2,字符串:‘abc’ “abc”

3,布尔值 true false

4,&& ‖ !

5,=符号

=赋值,==等于,类型不一样,只是一样的结果也为true,===等于,类型相同的值一样,结果才为true。

6.null和undefined

空和未定义

7.数组

var arr=[1,2,3,‘hello’]

new Array(1,2,3,‘hello’)

8.对象{}

person.name

9.严格检查模式

use strict

防止JavaScript随意性,写在第一行



数据类型


1.字符串类型


单引号和双引号包裹
(1)转义字符串\
(2)多行字符串的编写:用反引号包裹

例:

var msg =
  `hello
  world
  你好
  世界`

(3)模板字符串:用${}包裹

例:

let name = "xiaoming";
let age = 3;
let msg = `你好呀,我叫${name},今年${age}岁。`

(4)长度字符串

str.length 

(5)字符串的可变性

JS中字符串是不可变的

注:可像数组一样用下标获得字符串中的元素

(6)大小写转换

转大写:student.toUpperCase()

转小写:student.toLowerCase()

注释:是方法,不是属性

(7)获取下标

student.indexof('t')

(8)获取字符串substring

例:

student.substring(1)//从第2个字符串截取到最后一个字符串
student.substring(1,3)//从第2个字符串截取到第3个字符串

(x,y)截取包含x,不包含y 

2.数组 可以包含任意数据类型

(1)定义数组 var arr=[1,2,3,4,5,6]

(2)通过下标来取值和赋值

(3)数组长度arr.length

(4)假设给arr.length赋值,数组长度大小就会发生变化,调用未赋值的元素结果为undefined,但如果赋值过小,就会造成元素丢失

(5)通过元素获得下标索引 indexOf( )

(6)截取数组slice( ),与字符串中substring是相似的,返回一个新的数组

(7)尾部操作

push( )压入元素到尾步 pop( )弹出尾部的一个元素

(8)头部操作

unshfit( )压入元素到头部,shift( )弹出头部的一个元素

(9)排序 sort( )

(10)元素反转 reverse( )

(11)拼接 concat( )

并不会修改数组,只会返回一个新的数组

(12)链接符

join 打印拼接数组,使用特定的字符串连接

(13)多维数组

var arr=[[1,2],[3,4],[“5”,“6”]];

 

3.对象

(1) 定义对象

var 对象名={属性名:属性值

                      属性名:属性值

                      属性名:属性值}

JS中,{  }来表示一个对象 用键值对描述属性,多个属性之间用逗号隔开,最后一个属性不加逗号!

例:定义了一个person对象,它有四个属性。

var person = {
  name:"xiaoming",
  age:3,
  email:2585801995@qq.com,
  score:0
}

(3) 对象属性赋值

person. name=“xiaohong”

使用不存在的对象属性:不会报错,返回undefined

(4) 动态的删除属性

delete person.phone

(5)动态的添加

直接给新属性添加值即可  person.say=“hh”

(6)判断属性是否在对象中 in

‘age’ in persons

(7)判断是否是这个对象自身拥有的属性

person. has OwnProperty(‘age’)

JavaScript中的所有的键是字符串,值是任意对象

4.分支和循环

(1) if判断

例:

if(score>=60) {
  alert("过");
} else if(score<60&&score>0) {
  alert("挂科");
} else {
  alert("重修");
}

(2)while循环 注:避免死循环

例:

while(i<100) {
  i=i+1;
  console.log(i);
}
do {
  i=i+1;
  console.log(i);
}while(i<100)

区别:do while一定会执行一次,while是先判断,可能会不执行

(3)for循环

 例:

for(let i=0;i<100;i++) {
  console.log(i);
}

(4)forEach循环(5.1引入的特性)
例:

var arr = [1,2,12,3,23,4];
arr.forEach(function(value,index,arr) {
  console.log(value)
})//通过函数

(5)for in循环

for(var index in arr) { }

注:index是索引而不是数组中的具体元素

for(var num in arr) {
  console.log(arr[num])
}

(6)map和set ES6的新特性

map:

var map = new Map([['tom',100],['jack',90],['peter',80]]);
var name1 = map.get('tom');//通过key获得value
map.set('david',60);//新增或修改
map.delete("tom");//删除

set:无序不重复的集合

添加set.add( )

删除set.delete( )

是否包含某个元素set.has( )

(6)iterator迭代器

for in只能来用下标遍历

for of

例:

var arr = [3,4,5];
for(let x of arr) {
  console.log(x);
}

函数

1.定义和参数获取

例:创建绝对值函数
(1)定义函数
①定义方式

function abs(x) {
  if(x>=0) {
    return x;
  } else {
    return -x;
  }
}

一旦1执行到return代表函数结束,返回结果。
如果没有执行到return,函数执行完也会返回结果,结果为undefined。
②定义方式

var abs = function(x) {
  if(x>=0) {
    return x;
  } else {
    return -x;
  }
}

function(x)是匿名函数,但是可以把结果赋值给abs。通过abs就可以调用函数。

(2)调用函数

参数问题:JavaScript可以传任意个参数,也可以不传递参数。
参数进来是否存在的问题如何解决?
假设不存在参数如何规避?

解决方法:

var abs = function(x) {
  //手动抛出异常来判断
  if(typeof x!=='number') {
    throw 'Not a Number';
  }
  if(x>=0) {
    return x;
  } else {
    return -x;
  }
}

(3)arguments
arguments是JS免费送的关键字,能获取传递进来的所有参数,是一个数组。

var abs = function(x) {
  console.log("x=>"+x);
  for(var i=0;i<arguments.length;i++) {
    console.log(arguments[i]);
  }
  if(x>=0) {
    return x;
  } else {
    return -x;
  }
}

问题:arguments包含所有的参数,有时候想使用多余的参数来进行附加操作,需要排除已有参数。
(4)rest:ES6引入新特性,获取除了已经定义的参数之外的所有的参数。
以前

if(arguments.length>2) {//如果定义了2个参数
  for(var i=2;i<arguments.length;i++) {…}
}

现在

function f(a,b,…rest) {
  console.log("a=>"+a);
  console.log("b=>"+b);
  console.log(rest);
}

注意:rest参数只能写在最后面,必须用…标识。

2.变量的作用域、let、const

(1)在JavaScript中,var定义变量实际是有作用域的。
①假设在函数体中声明,则在函数体外不可使用(用闭包可以实现)。

②如果两个函数使用了相同的变量名,只要在函数内部就不冲突。

function f1() {
  var x=1;
}
function f2() {
  var x='A';
}

③内部函数可以访问外部函数的成员,反之则不行。

function f() {
  var x=1;
  function f3() {
    var y=x+1;//2
  }
  var z=y+1;//Uncaught ReferenceError: y is not defined
}

④假设内部函数变量和外部函数变量重名:
在JavaScript中函数查找变量从自身函数开始,由“内”向“外”查找,假设外部存在这个同名的函数变量,则内部函数会自动屏蔽外部函数的变量。

function f1() {
  var x=1;
  function f2() {
    var x='A'
    console.log('inner'+x);//innerA
  }
  console.log('outer'+x);//outer1
}


(2)提升变量的作用域

function f() {
  var x="x"+y;
  console.log(x);
  var y="y";
}

结果为xundefined。
说明:js执行引擎,自动提升了y的声明,但是不会提升变量y的赋值。
等同于:

function f() {
  var y;
  var x="x"+y;
  console.log(x);
  y="y";
}

规范:所有变量的定义都放在函数头部

(3)全局变量
全局对象window

var x="xxx";
window.alert(window.x);//默认所有的全局变量,都会自动绑定在window对象下

alert()这个函数本身也是一个window变量。

var x="xxx";
window.alert(x);
var old_alert=window.alert;
//old_alert(x);
window.alert=function() {
};
window.alert(123);//123没有弹出,发现alert()失效了
//恢复
window.alert=old_alert;
window.alert(456);//弹出456

JavaScript实际上只有一个全局作用域,任何变量(函数也可以视为变量),假设没有在函数作用范围内找到,就会向外查找,如果在全局作用域都没有找到,报错RefrenceError。


减少冲突:

//唯一全局变量
var win={ }
//定义全局变量
win.name= "xiaoming";
win.add=function(a,b) {
  return a+b;
}

把代码全部放入定义的唯一空间名字中,降低全局命名冲突问题。
jQuery库把所定义的都放到jQuery中,并用简化符$()。

(4)局部作用域let

如:

function aa() {
  for(var i=0;i<100;i++) {
    console.log(i);
  }
  console.log(i+1);//101
}

问题:i出了这个作用域还可以使用。
ES6中let关键字,解决局部作用域冲突问题。

function aa() {
  for(let i=0;i<100;i++) {
    console.log(i);
  }
  console.log(i+1);//Uncaught ReferenceError: i is not defined
}

建议使用let去定义局部作用域的变量。

(5)常量const
在ES6定义常量:用全部大写字母命名的变量就是常量,建议不要修改这样的值。

var PI='3.14';//可以改变这个值

在ES6引入了常量关键字const,可以修改值

例:

const PI='3.14';
PI='123';//TypeError: Assignment to constant variable

3.方法的定义和参数获取

(1)定义方法
把函数放在对象里面,对象里只有方法和属性。

var ming = {
  name: 'xiaoming',
  birth: 2001,
  //方法
  age: function() {
    var now = new Date().getFullYear();
    return now-this.birth;
  }
}
//调用属性
ming.name
//调用方法,一定要带()
ming.age()

this.代表什么?

var ming = {
  name: 'xiaoming',
  birth: 2001,
  //方法
  age: getAge
}
function getAge() {
    var now = new Date().getFullYear();
    return now-this.birth;
}
ming.age();//20
getAge();//NaN,单独使用,使用window对象,没有birth属性
}

this是无法指向的,是默认指向调用它的对象。
(2)apply

可以控制this指向

getAge.apply(ming,[]);//this指向ming,参数为空

内部对象


标准对象:number、string、boolean、object、function、undefined

 

 

1.Date日期对象

(1)基本使用

var now = new Date();
now.getFullYear();//年
now.getMonth();//月,用0~11代表月
now.getDate();//日
now.getDay();//星期
now.getHours();//时
now.getMinutes();//分
now.getSeconds();//秒
now.getTime();//时间戳,全世界统一从1970.1.1 00:00:00到现在的毫秒数
console.log(new Date(1610588740041));//时间戳转为时间

(2)转换

now = new Date(1610588740041);
now.toLoacleString();//本地时间
now.toGMTString();//标准时间
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值