JS功能
功能: 数据交互
特效
//大量的逻辑代码
表单验证
正则表达式
方式
1.js里面的基本语法
变量 闭包 逻辑结构 循环结构 函数(参数 自执行 匿名函数 返回值函数问题 函数递归)
2.window 对象 -document(dom–操作) --history历史 —location 地址对象 (bom-操作)
3.js里面的内置对象 Array String Date Math
4.继承之类 (面向对象的开发 原型链继承 构造继承 实例继承 混合继承)
5.模式 (单例模式)
6.ajax(原理 跨域的问题)
7.js 异常 try catch
JS里面的函数
js里面的函数问题
什么是函数? (方法 调用完成 )
函数的声明规则 关键字 function
function name(){
}
函数的调用规则 name();
函数的声明提前 在代码执行之前提前声明
声明函数
name();
function name(){
console.log(1);
}
1.函数的参数 参数:形参 调用函数传递的值 实参
student(1,2,3);
function student(name,sex,age){
console.log(name,sex,age);//1 2 3
}
无参函数
arguments 函数特有的属性 里面是函数的相关参数
stu(1,2,3,4,5,6);
function stu(){
console.log(arguments[0],arguments[1],arguments[2],arguments[3]);// 1 2 3 4
}
2.函数有无返回值问题 return 返回 直接跳出 后续代码不执行
console.log(showname());//1
function showname(){
//代码
return 1;
}
3.自执行函数 匿名函数 函数没有名称
(function (){
console.log(123);//123
})();
(function (a,b){
console.log(a,b);//1 2
})(1,2);
变量也可以提前声明
下面这种声明方式的函数 不能被提前声明
var fun=function (){
console.log(1);//1
}
fun();
JS变量
变量可以分为变量 常量(只读)可以变的量
如何声明
声明变量的关键字 var(js里面区分大小写****** VAR)
声明变量的规则:
var 变量名称 = 初始化
var a;(声明变量 使用变量的时候一定要初始化)
a=10;
console.log(b);
同时声明多个变量
var c, d;
console.log(c, d);
声明多个时候初始化
var e, f = 5;
console.log(e, f);
变量js里面可以分:两种变量 局部变量 全局变量 (相对的)
变量的数据类型
js里面的数据类型 number string boolean undefined object function
typeof 检测变量的数据类型
var a1 = 1;
console.log(typeof a1);//number
var a2 = "abc";
console.log(typeof a2);//string
var a3 = true;
console.log(typeof a3);//boolean
var a4 = null;
console.log(typeof a4);//object
var a5;
console.log(typeof a5);//undefined
var a6 = function () {
}
console.log(typeof a6);//function
相对的
全局变量
在事件或者方法之外的变量 —全局变量
局部变量 --事件或者方法内部的变量----局部变量
变量名称冲突 就近选择
var m1 = 20;
function mm1() {
var m2 = 30;
console.log(m1);//undefined
var m1 = 100;
console.log(m1, m2);//100 30
}
mm1();
JS循环结构
for while do while
最简单的for 死循环
for(;;){}
金字塔线条
var s = "ab";
var l = "de";
var h="c";
console.log("ab" +"c"+ "de");//拼接
for(var i=1;i<50;i++)
{
document.write("<hr style='width:"+(i*10)+"px;'/>")//金字塔<hr style="width:10px;">
}
金字塔乘法表
for (var i = 1; i < 10; i++) {
for (var k = 1; k <= i; k++) {
if (k * i < 10) {
document.write("<span>" + (i + "*" + k + "=" + k * i + " ") + "</span>");
}
else {
document.write("<span>"+(i + "*" + k + "=" + k * i + " ")+"</span>");
}
}
document.write("<br>");
}
// document.write("<span>"+(i + "*" + k + "="+(k * i<10?(k * i) + " ":(k*i)+" "))+"</span>");
不带var 默认为全局变量
带var 的变量 不可以删除 不带的可以删除
闭包
什么是闭包:使用别人的私有变量
优缺点:缺点:会将闭包的值存在内存里面 会占用内存 ----网页的内存泄露
优点:可以使用局部变量
function fun1(){
var a=10;
return a;
}
function fun2(){
console.log(fun1());//10
}
fun2();
递归
函数的递归 反复执行自己本身
for (var i = 2; i < 100; i++) {
var issu = false;
for (var k = 2; k < i; k++) {
if (i % k == 0) {
issu = true;
}
}
if (!issu) {
console.log("素数:" + i);
}
}
逻辑结构
逻辑选择结构 if 逻辑判断
if()判断的条件 成立或者不成立
运算符:
数学运算符 逻辑运算符 比较运算符
+ - * / % ++ --
&& || !
> < >= <= !=
= == ===(= 赋值 ==判断值一样 ===值和类型 )
++ -- 前置或者后置 (前置先++ -- 在运算,后置 先运算在++ --)
字符串里面的常用方法
字符串的方法
查找字符的方法
一个参数 找到了返回当前字符的索引位置 没找到直接返回-1
var str = "a|b|c|d|efg";
console.log(str.indexOf("m"));//-1
两个参数 找到字符返回字符的索引位置 没找到返回-1 从哪个位置开始找
console.log(str.indexOf("a", 0));//0
str.lastIndexOf()后往前面找
遍历字符串 获取每个字符的索引位
charAt(pos) 根据索引获取对应的字符
for (var index in str) {
console.log(str[index]);//a | b | c | d | e f g
console.log(str.charAt(index));
console.log(str.charCodeAt(index));//根据索引获取对应的ascii值
}
var as = 97;
console.log(String.fromCharCode(as));//a
split 将字符串转化为集合
console.log(str.split("|"));
集合转化为字符串
var ss = str.split("|");
console.log(ss.join(""));//abcdefg
字符串的拼接 concat 合并
var c1 = "abcd";
var c2 = "def";
console.log(c1.concat(c2));//abcdef
替换 replace
console.log(c1.replace("b", 1));//a1cd
字符串的截取 substr(index,length)
console.log(str.substr(1, 4));//|b|c
substring(startindex,endindex);
console.log(str.substring(1, 4));//|b|
查找索引
console.log(str.search("a"));//0
大小写转化的方法toUpperCase() 转化大写 toLowerCase 转化为小写
console.log(str.toUpperCase());//A | B | C | D | E F G
console.log(str.toLowerCase());a | b | c | d | e f g
slice 截取字符串
console.log(str.slice(0, 4), str);//a | b | a | b | c | d | e f g