JavaScript

时间:2019-03-18
本文章向大家介绍JavaScript,主要包括JavaScript使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

引入方式

1.在body内的<script>中写js代码

<script>
  alert('骑士计划!')    alert  弹窗  打开网页时会弹出提示窗口
</script>

2.外部链接

将写好的js文件引入

<script src="test.js"></script>

注释

// 这是单行注释

/*
这是
多行注释
*/

数据类型

数值 number

不区分整型和浮点型

parseInt()   将括号内的内容转换成数值类型

parseInt('123');
---->123

parseInt('abc');      
---->NaN              # NaN,表示不是一个数字(Not a Number),也就是说是一个值,但不是数字

字符串  string

字符串方法

.length 返回长度
.trim() 移除空白
.trimLeft()    移除左边的空白
.trimRight() 移除右边的空白
.charAt(n) 通过索引查找元素,超过最大值返回''空字符串
.concat() 拼接
也可以通过 + 来进行字符串拼接
.indexOf(,索引) 子序列位置,从索引几开始找,没有返回-1
.slice(start, end) 切片 顾头不顾尾
.toLowerCase() 小写
.toUpperCase() 大写
.split('', 元素个数) 分割 第一个参数为指定以什么分割,第二个可以指定最终结果显示几个值

布尔值   Boolean

true和flase都是小写

""(空字符串)、0、null、undefined、NaN都是false

object   对象

null       空        需要指定或情况一个变量时使用

array    数组    [1,2,3]    类似于python 的列表

object   自定义对象   {'name':'alex',gender:male}  类似于python的字典,键可以不加引号

以上三种类型打印typeof数据类型 都是object

数组方法:
.length 数组的大小 .push() 尾部追加元素 .pop() 删除尾部元素,得到删除的值 .unshift() 头部插入元素 .shift() 头部移除元素 .slice(1,4) 切片 .reverse() 反转 会改变原数组 .join() 将数组元素连接成字符串 .concat() 两个数组合并,得到一个新数组,原数组不变 .splice() #参数:1.从哪删(索引) 2.删几个 3.删除位置替换的新元素(可多个元素) .sort() 排序 如果对数字进行排序,会把数字都转换成字符串,按照字符编码的顺序进行排序 如果想要正确的排序,需要写函数: function sortNumber(a,b){ return a - b #升序 降序为b-a } var arr1 = [11, 100, 22, 55, 33, 44] arr1.sort(sortNumber)
自定义对象方法:
d.name             通过键取值
d['gender']        通过键取值

运算符

算数运算符

+

-

*

/

%

++        自加1 i++操作优先级低,先执行逻辑,再加1 ++i操作优先级高,先加1,再执行逻辑

--          自减1

比较运算符

>

>=

<

<=

==      弱等于    不比较类型

===    强等于    比较

!=       弱不等于

!==     强不等于

逻辑预算符

&& and

|| or

! 非

赋值运算符

=

+=

-=

*=

/=

流程控制

if--else

if --else if--else      多条件

if (a > 5) {
console.log("a>5");
}else if (a < 5){
console.log("a < 5");
}else {
console.log("a = 5");
};

switch   切换

switch (10){           括号内必须是一个值或者是能够得到一个值的算式
    case 10:
        console.log("10")
        break         case子语句中一般都会有break,不然会一直向下运行到结束
    case 20:
        console.log("20")
        break
    default:         以上条件都不满足的情况下运行,相当于else
        console.log("unknow")
};

for循环

# 打印0--9
for (var i=0;i<10;i++) {      #  i++优先级低,会先执行逻辑,再加1
console.log(i);
}
# 循环数组
方法一:
var l1 = [11,22,33,44,55]
for (var i in l1) {
console.log(i,l1[i]);            i是索引,通过索引把每个元素再打印出来
};

方法二:
for (var i=0;i<l1.length;i++){            
console.log(i,l1[i]);
};

while 循环

# 打印0--9
var i = 0;
while (i < 10) {
console.log(i);
i++;
};

三元运算

var a = 1;
var b = 2;
var c = a > b ? a : b       如果a>b,返回a,否则返回b

 函数

普通函数

function f2(a,b) {          定义函数,a,b为形参
console.log(a,b);
};
f2(1,2)                     调用函数,给a,b传参

function sum(a,b) {
return a+b;                 返回值  在js中,返回值只有一个,默认返回最后一个值,可以以数组的形式返回多个值
};
sum(1,2)

匿名函数

var sum = function(a, b){
return a + b;
};
sum(1,2)

自执行函数

(function(a,b) {            不需要函数名,将函数整体放在括号里
return a + b;
})(1,2);                    在最后加括号,如果需要传参,将参数写在括号内

全局变量和局部变量

在函数内声明的变量就是局部变量,只能在函数内部访问 在函数运行结束后删除

在函数外声明的变量就是全局变量,网页上所有函数都能访问 在页面关闭后删除

作用域

先在函数内部查找变量,找不到则到外层函数查找,逐步找到最外层

1.
var city = "BeiJing"; function f() { var city = "ShangHai"; function inner(){ var city = "ShenZhen"; console.log(city); } inner(); } f(); #ShenZhen
2. var city = 'beijing'; function j() { console.log(city); } function f() { var city = 'shanghai'; return j; } var ret = f(); ret(); #beijing 3. var city = "BeiJing"; function f(){ var city = "ShangHai"; function inner(){ console.log(city); } return inner; } var ret = f(); ret(); #ShangHai

对象

创建对象

var person = new Object();     创建一个person的自定义对象  类似字典
person.name = 'alex';          给对象封装属性 
person.age = 18; 

面向对象

构造函数,命名的首字母要大写,实例化的时候使用new关键字进行实例化

function Person(name){
    this.name=name
}
Person.prototype.func1 = function(){      使用prototype添加方法
    console.log(this.name,'爱编程!')
}
var p1 = new Person('alex');              实例化对象  使用new  传参给name
p1.func1();                               方法和属性只能通过对象来调用,不能使用类名来调用

map

类似于对象,也是键值对的集合,'键'可以是各种类型的值

var m = new Map();
var o = {p: "Hello World"}

m.set(o, "content"}               o作为键,m作为值
m.get(o)                          取值
m.has(o)                          #true  判断有没有
m.delete(o)                       #true  删除键值对
m.has(o)                          #false  此时再判断会返回false

Date对象

var d1 = new Date();               # 获取当前时间
console.log(d1.toLocaleString());  # 打印当前时间日期的字符串形式

var d2 = new Date("2004/3/20 11:12");   #设置特定时间
console.log(d2.toLocaleString());
Date对象方法:
var d = new Date(); 
getDate()                 获取日
getDay ()                 获取星期 ,数字表示(0-6),周日数字是0
getMonth ()               获取月(0-11,0表示1月,依次类推)
getFullYear ()            获取完整年份
getHours ()               获取小时
getMinutes ()             获取分钟
getSeconds ()             获取秒
getMilliseconds ()        获取毫秒
getTime ()                返回累计毫秒数,时间戳

JSON对象

var str1 = '{"name": "chao", "age": 18}';    定义字符串
var obj1 = {"name": "chao", "age": 18};      定义对象
var obj = JSON.parse(str1);                  将字符串转换成对象
var str = JSON.stringify(obj1);              将对象转换成字符串

RegExp对象   正则

创建正则对象
方式1:
参数1 正则表达式(不能有空格)
参数2 匹配模式:常用g(全局匹配)和i(忽略大小写)
var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9_]{5,11}$");  规定用户名以字母开头,以字母,数字,下划线组成,且总长度在6--12位之间
reg1.test('ac2345');     # true

方式2:以//包裹条件
var reg2 = /^[a-zA-Z][a-zA-Z0-9_]{5,11}$/; 
reg2.test('bder34');     # true
注意:如果你直接写一个reg2.test(),test里面啥也不传,默认传的是一个undefined,会返回一个true
var s2 = 'hello world';
s2.match(/o/g);         # ["o", "o"]    全局匹配s2中的o元素
s2.search(/h/g);        # 0   匹配h的索引,找到第一个元素就返回
s2.replace(/o/g, "s");  # "hells wsrld"    将所有的o替换为s

Math对象

不需要new来创建对象,直接使用.的方法

方法:
Math.abs(x)   返回数的绝对值
exp(x)        返回 e 的指数
floor(x)      小数部分进行直接舍去
log(x)        返回数的自然对数(底为e)
max(x,y)      返回 x 和 y 中的最高值
min(x,y)      返回 x 和 y 中的最低值
pow(x,y)      返回 x 的 y 次幂
random()      返回 0 ~ 1 之间的随机数
round(x)      把数四舍五入为最接近的整数
sin(x)        返回数的正弦
sqrt(x)       返回数的平方根
tan(x)        返回角的正切