JavaScript入门笔记-1.快速入门
1.基本语法
console.log('Hello');
Hello
①注释
// 这是一行注释
console.log('hello world'); // 这也是注释
hello world
/* 从这里开始是块注释
仍然是注释
仍然是注释
注释结束
*/
2.数据类型和变量
①Number
JavaScript不区分整数和浮点数,统一用Number表示
123; // 整数123
0.456; //浮点数0.456
1.2345e3; //科学计算法表示1.2345*1000
-99; //负数
NaN; //Not a Number,当无法计算结果时用NaN表示
Infinity; //Infinity表示无限大
Infinity
②字符串
字符串是以单引号'或双引号"括起来的任意文本,如'abc', "xyz"等等
''或""本身只是一种表示方式,不是字符串的一部分
③布尔值
true;
false;
2 > 1;
2 >= 3;
true && true; //与运算
false || false; //或 运算
!true; //非运算
false
④比较运算符
2 > 5; //false
5 >= 2; //true
7 === 7; //true
false == 0; //true
false === 0; //flase
// 在JavaScript中,有两种比较运算符:
// == 会自动转换数据类型再比较
// === 不会自动转换数据类型,数据类型不一致,返回false
NaN === NaN; //false
isNaN(NaN); //true
true
// 浮点数的相等比较
1 / 3 === (1 - 2 / 3); //false
/*这不是JavaScript的设计缺陷。浮点数在运算过程中会产生误差,因为计算机无法精确表示无限循环小数
要比较两个浮点数是否相等,只能计算它们之差的绝对值,看是否小于某个阈值*/
Math.abs(1 / 3 - (1 - 2 / 3)) < 0.0000001; //true
true
⑤null和undefined
null表示一个"空"的值
undefined表示值未定义
⑥数组
JavaScript的数组可以包括任意数据类型
[1, 2, 3.14, 'Hello', null, true];
[ 1, 2, 3.14, 'Hello', null, true ]
new Array(1, 2, 3); //通过Array()函数创建数组[1,2,3]
[ 1, 2, 3 ]
var arr = [1, 2, 3.14, 'Hello', null, true];
arr[0];
arr[5];
true
⑦对象
JavaScript的对象是一组有键-值组成的无序集合
var person = {
name: 'Bob',
age: 20,
tags: ['js', 'web', 'mobile'],
city: 'Beijing',
hasCar: true,
zipcode: null
};
// 键都是字符串类型,值可以是任意数据类型,每个键又称为对象的属性
person.name;
person.zipcode;
null
⑧变量
var a; //申明了变量a,此时a的值为undefined
var t = null; //t的值是null
// 同一个变量可以反复赋值,可以是不同类型的变量,且只能用var声明一次
var a = 123;
a = 'abc';
'abc'
// 显示变量的内容
var x = 100;
console.log(x);
100
⑨strict模式
如果一个变量没有通过var声明就被使用,会被定义为全局变量
使用var申明的变量则不是全局变量,它的范围被限制在该变量被申明的函数体内
启用strict模式的方法是在JavaScript代码的第一行写上:'use strict';
不用var申明的变量会被视为全局变量,为了避免这一缺陷,所有的JavaScript代码都应该使用strict模式
3.字符串
①多行字符串
console.log(`多行
字符串
测试`);
多行
字符串
测试
②模板字符串
var name = '小明';
var age = 20;
var message = '你好,' + name + ', 你今年' + age + '岁了!';
console.log(message);
你好,小明, 你今年20岁了!
// 使用模板字符串
var message = '你好,${name}, 你今年${age}岁了!';
console.log(message);
你好,${name}, 你今年${age}岁了!
③操作字符串
var s = 'Hello, world!';
s.length;
13
// 索引
s[0];
s[6];
' '
// 字符串是不可变的,对字符串的某个索引赋值,不会报错,也没有任何效果
var s = 'Test';
s[0] = 'X';
console.log(s);
Test
调用JavaScript的字符串方法,不会改变原有字符串的内容,而是返回一个新字符串
④toUpperCase
toUpperCase()把一个字符串全部变为大写
var s = 'Hello';
s.toUpperCase(); //返回'HELLO'
'HELLO'
⑤toLowerCase
toLowerCase()把一个字符串全部变为小写
var s = 'HEllo';
var lower = s.toLowerCase();
lower;
'hello'
⑥indexOf
indexOf()会搜索指定字符串出现的位置
var s = 'hello, world';
s.indexOf('world');
7
⑦substring
substring()返回指定索引区间的字串
var s = 'hello, world';
s.substring(0, 5); //从索引0开始到5,不包括5
'hello'
s.substring(7); //从索引7开始到结束,返回'world'
'world'
4.数组
// 获取Array长度
var arr = [1, 2, 3.14, 'Hello', null, true];
arr.length; //6
6
// 修改Array的length会改变Array大小
var arr = [1, 2, 3];
arr.length;
3
arr.length = 6;
arr;
[ 1, 2, 3, <3 empty items> ]
arr.length = 2;
arr;
[ 1, 2 ]
// 通过索引修改Array
var arr = ['A', 'B', 'C'];
arr[1] = 99;
arr;
[ 'A', 99, 'C' ]
// 索引超出范围,不会报错,会修改Array的大小
var arr = [1, 2, 3];
arr[5] = 'x';
arr;
[ 1, 2, 3, <2 empty items>, 'x' ]
①indexOf
通过indexOf()来搜索一个指定的元素的位置
var arr = [10, 20, '30', 'xyz'];
arr.indexOf(10);
0
arr.indexOf(30); //元素30没找到,返回-1
-1
②slice
Array的切片操作,对应String的substring()
var arr = ['a', 'b', 'c', 'd', 'e'];
arr.slice(0, 3); //不包括结束索引3
[ 'a', 'b', 'c' ]
arr.slice(3); //从索引3开始到结束
[ 'd', 'e' ]
不给slice()传递任何参数,会从头到尾截取所有元素
利用该点可以方便的复制一个Array
var arr = ['a', 'b', 'c', 'd', 'e'];
var aCopy = arr.slice();
aCopy; //复制arr
[ 'a', 'b', 'c', 'd', 'e' ]
aCopy === arr; //false
false
③push和pop
push()向Array的末尾添加若干元素,
pop()删除Array的末尾元素
// push方法
var arr = [1, 2];
arr.push('A', 'B');
arr;
[ 1, 2, 'A', 'B' ]
// pop方法
arr.pop(); arr.pop();
arr;
[ 1, 2 ]
④unshift和shift
unshift()往Array的头部添加若干元素;
shift()则把Array的头部首个元素删掉;
// unshift方法
var arr = [1, 2];
arr.unshift('A', 'B');
arr; // ['A','B', 1, 2]
[ 'A', 'B', 1, 2 ]
// shift方法
arr.shift(); arr.shift();
arr;
[ 1, 2 ]
⑤sort
sort()可以对当前Array进行排序,它会直接修改Array的元素位置
直接调用会按照默认顺序排序,同时可以自定义顺序排序
var arr = ['B', 'C', 'A'];
arr.sort();
arr;
[ 'A', 'B', 'C' ]
⑥reverse
reverse()把Array元素顺序反转
var arr = ['one', 'two', 'three'];
arr.reverse();
arr;
[ 'three', 'two', 'one' ]
⑦splice
splice()方法是修改Array的"万能方法"
可以从指定的索引开始删除若干元素,再从该位置添加若干元素
var arr = ['Microsoft', 'Apple', 'Yahoo', 'AOL', 'Excite', 'Oracle'];
// 从索引2开始删除3个元素,然后再添加两个元素
arr.splice(2, 3, 'Google', 'Facebook');
arr;
[ 'Microsoft', 'Apple', 'Google', 'Facebook', 'Oracle' ]
// 只删除,不添加
arr.splice(2, 2);
arr;
[ 'Microsoft', 'Apple', 'Oracle' ]
// 只添加,不删除
arr.splice(2, 0, 'Google', 'Fackbook');
arr;
[ 'Microsoft', 'Apple', 'Google', 'Fackbook', 'Oracle' ]
⑧concat
拼接两个Array,并返回一个新的Array
var arr = ['a', 'b', 'c'];
var added = arr.concat([1, 2, 3]);
added;
[ 'a', 'b', 'c', 1, 2, 3 ]
concat方法没有修改当前Array,而是返回了一个新的Array
arr; //还是原来的arr
[ 'a', 'b', 'c' ]
concat方法可以接收任意个元素和Array,并且自动把Array拆开,添加到新的Array中
var arr = ['a', 'b', 'c'];
newArray = arr.concat(1, 2, [3, 4]);
newArray;
[
'a', 'b', 'c', 1,
2, 3, 4
]
⑨join
将当前Array中的每个元素都用指定的字符连接起来,返回连接后的字符串
如果Array的元素不是字符串,将自动转换为字符串后再连接
var arr = ['a', 'b', 'c', 1, 2, 3];
arr.join('@');
'a@b@c@1@2@3'
⑩多维数组
如果数组的某个元素是一个Array,可以形成多维数组
var arr = [[1, 2, 3], [400, 500, 600], '-'];
arr;
[ [ 1, 2, 3 ], [ 400, 500, 600 ], '-' ]
5.对象
JavaScript的对象是一种无序的集合数据类型,由若干键值对组成
JavaScript的对象的所有属性都是字符串,属性对应的值可以是任意数据类型
var xiaoming = {
name: 'Danny',
birth: 1996,
school: 'Tsinghua University',
height: 173,
weight: 66,
score: null
};
// 获取对象属性
xiaoming.name;
'Danny'
如果属性名包含特殊字符,就必须用''括起来
访问这个属性也无法使用.操作符,必须用['xxx']来访问
var xiaohong = {
name: '小红',
'middle-school': 'No.1 Middle School'
};
xiaohong['middle-school'];
'No.1 Middle School'
xiaohong['name']; //等价于xiaohong.name;
'小红'
在编写JavaScript代码的时候,属性名尽量使用标准的变量名,
这样就可以直接通过object.prop的形式访问一个属性了
①添加属性
var xiaoming = {
name: '小明'
};
xiaoming.age = 18;
18
②删除属性
delete xiaoming['name'];
delete xiaoming.age;
true
③判断属性是否存在
var xiaotian = {
name: 'tian',
birth: 2000,
};
'name' in xiaotian;
true
in判断一个属性存在,这个属性不一定是xiaoming的,有可能是继承得到的
判断一个属性是否是自身拥有的,而不是继承得到的,可以用hasOwnProperty()方法
'toString' in xiaotian;
true
xiaotian.hasOwnProperty('toString');
false
6.条件判断
var age = 20;
if (age >= 18) {
console.log('adult');
} else {
console.log('teenager');
}
adult
// 多行条件判断
var age = 3;
if (age >= 18) {
console.log('adult');
} else if (age >= 6) {
console.log('teenager');
} else {
console.log('kid');
}
kid
var s = '123'
if (s.length) { //条件计算结果为3
//
}
JavaScript把null、undefined、0、NaN和空字符串''视为false,
其他值一概视为true,因此上述代码条件判断的结果是true
7.循环
①for循环
// 计算 1 + 2 + 3 + ... + 10
var x = 0;
var i;
for (i=1; i<=1000; i++) {
x = x + i;
}
x;
500500
for循环最常用的地方就是利用索引来遍历数组
var arr = ['Apple', 'Google', 'Microsoft'];
var i, x;
for (i=0; i<arr.length; i++) {
x = arr[i];
console.log(x);
}
Apple
Google
Microsoft
②for...in
把一个对象的所有属性依次循环出来
var o = {
name: 'Jack',
age: 20,
city: 'Beijing'
};
for (var i in o) {
console.log(i); //'name', 'age', 'city'
}
name
age
city
要过滤掉对象继承的属性,用hasOwnProperty()来实现
var o = {
name: 'Jack',
age: 20,
city: 'Beijing',
};
for (var key in o) {
if (o.hasOwnProperty(key)) {
console.log(key); //'name', 'age', 'city'
}
}
name
age
city
由于Array也是对象,它的每个元素的索引被视为对象的属性
for...in循环可以直接循环出Array的索引
var a = ['A', 'B', 'C'];
for (var i in a) {
console.log(i); //'0','1','2'
console.log(a[i]); //'A','B','C'
}
0
A
1
B
2
C
for...in对Array的循环得到的是String而不是Number
while循环
for循环在已知循环的初始和结束条件时非常有用
只有一个判断条件时用while循环更合适
var x = 0;
var n = 99;
while (n > 0) {
x = x + n;
n = n - 2;
}
x;
2500
do...while
var n = 0;
do {
n = n + 1;
} while (n < 100);
n; //100
100
8.Map和Set
Map
var m = new Map([['Michael', 95], ['Bob', 75], ['Tracy', 85]]);
m.get('Michael');
95
初始化Map需要一个二维数组
var m = new Map(); //初始化一个空Map
m.set('Adam', 67); //添加新的key-value
m.set('Bob', 59);
Map { 'Adam' => 67, 'Bob' => 59 }
m.has('Adam'); //食肉存在key 'Adam': true
m.get('Adam'); //67
m.delete('Adam'); //删除key 'Adam'
m.get('Adam'); //undefined
Set
Set也是一组key的集合,和Map不同的是,Set不存储value,且在Set中,没有重复的key
var s1 = new Set(); //空Set
var s2 = new Set([1, 2, 3]); //含1,2,3
重复元素在Set中自动被过滤
var s = new Set([1, 2, 3, 3, '3']);
s; //Set[1, 2, 3, '3']
Set { 1, 2, 3, '3' }
通过add(key)方法可以添加元素到Set中
通过delete(key)方法可以删除元素
s.add(4);
s;
Set { 1, 2, 3, '3', 4 }
s.delete(3);
s;
Set { 1, 2, '3', 4 }
9.iterable
Array、Map和Set都属于iterable类型,具有iterable类型的集合可以通过for...of循环遍历
for...in循环的是对象的属性;for...of循环的是迭代器中的是一个元素
var a = ['a', 'b', 'c']; //Array
var m = new Map([[1, 'x'], [2, 'y'], [3, 'z']]); //Map
var s = new Set(['a', 'b', 'c']); //Set
for (var i of a) {//遍历Array
console.log(i);
}
for (var x of m) {//遍历Map
console.log(x[0] + '=' + x[1]);
}
for (var x of s) {//遍历Set
console.log(x);
}
a
b
c
1=x
2=y
3=z
a
b
c
更好的方式是直接使用iterable内置的forEach方法,
它接受一个函数,每次迭代就自动回调该函数
'use strict';
var a = ['a', 'b', 'c'];
a.forEach(function (element, index, array) {
// element: 指向当前元素的值
//index: 指向当前索引
//array: 指向Array对象本书
console.log(element + ', index= ' + index);
});
a, index= 0
b, index= 1
c, index= 2
Set与Array类似,但是Set没有索引,因此回调函数的前两个参数都是元素本身
var s = new Set(['a', 'b', 'c']);
s.forEach(function (element, sameElement, set) {
console.log(element);
});
a
b
c
Map的回调函数参数依次是value、key和map本身
var m = new Map([[1, 'x'], [2, 'y'], [3, 'z']]);
m.forEach(function (value, key, map) {
console.log(value);
});
x
y
z
// 可以省略某些参数,比如只需要获得Array的element
var a = ['a', 'b', 'c'];
a.forEach(function (element) {
console.log(element);
});
a
b
c
原文地址:https://www.cnblogs.com/warmscar/p/11956277.html
- 小程序开发工具全新上线 附下载地址和教程
- JS页面跳转代码怎么写?总结了5种方法
- finecms如何控制调用子栏目的数量
- finecms如何调用多个指定栏目的内容
- finecms同时调用子栏目和子栏目的文章怎么操作
- 群体智能算法-黏菌寻找食物最优路线行为模拟 2
- thinkcmf安装教程与目录结构详解 快速上手版
- finecms如何批量替换文章中的关键词?
- dedecms批量修改文章为待审核稿件怎么操作
- 群体智能算法-黏菌寻找食物最优路线行为模拟
- finecms设置伪静态后分享到微信不能访问怎么处理
- composer安装其实可以很简单 两行命令就解决了
- 章神的私房菜之数据预处理
- 如何调用finecms指定栏目的描述关键词
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- GlassFish 目录穿越漏洞测试过程
- 安装CDH7.1.1
- GIT-SHELL 沙盒绕过(CVE-2017-8386)
- Azkaban-2.5.0-部署与常见案例
- 无字母数字webshell之提高篇
- Sqoop-1.4.7-部署与常见案例
- Hbase-2.0.0_01_安装部署
- 前端黑魔法之远程控制地址栏
- 攻击LNMP架构Web应用的几个小Tricks
- Hbase-2.0.0_02_常用操作
- phpjiami 数种解密方法
- Hbase-2.0.0_03_Hbase数据模型
- ELK-elasticsearch-6.3.2部署
- Real World CTF 2018 bookhub 总结
- python http.server open redirect vulnerability