JavaScript基础

JavaScript基础

第一节 JS简介

95年诞生 script代表脚本 脚本语言运行时才用解释器加载代码,编译语言则需要编译器。

能够脱离浏览器运行 node.js 也叫后端的JS

js语法核心+dom编程+bom编程

所有现代的 HTML 页面都使用 JavaScript,可以用于改进设计、验证表单、检测浏览器、创建cookies等。

第二节 变量 表达式 运算符

alert() 弹出窗口显示

<body>	//推荐放在body里
    <script type="text/javascript" >
        alert("hello world")	//控制弹出窗口
    </script>
</body>  

var 声明变量

typeof 返回类型

第三节 流程控制语句

for in 一般用来循环复杂的对象

for(var name in window){
    console.log(name);	//在浏览器console上打印对应的属性
}

label语法

label: 声明

outloop:
for(var i=0;i<3;i++){
    for(var j=0;j<3;j++){
        if(i==1&&j==1){
            break outloop;	//直接跳到outloop所在层 此处是跳出两层循环
        }
        num++;
    }
}

第四节 函数 引用类型 作用域

函数
function add(num1,num2) {
    return num1+num2;
}

arguments 是一个类数组对象。代表传给一个function的参数列表。

function add() {	//形参可写可不写 JS里只是提示作用
    console.log(arguments.length) // 直接用数组接受传递形参
}
var a=2;
var b=3;
var v="laowang";
add(a,b,v);

instanceof适用于引用数据类型,判断左侧的类型是否是右侧的类型,返回boolean类型

var a=[1,2,3];
function test(param) {
    if(a instanceof Array){
        param[2]=5;
    }
}

JavaScript 中,函数及变量的声明都将被提升到函数的最顶部。

JavaScript 中,变量可以在使用后声明,也就是变量可以先使用再声明。

​ 即变量提升:函数声明和变量声明总是会被解释器悄悄地被"提升"到方法体的最顶部。

通常我们在每个作用域开始前声明这些变量。

​ 因为javascript代码并不是一行一行往下执行的,javascript的执行分为两个步骤:编译(词法解释/预解释),执行。当我们碰到 var a = “laowang” 定义一个变量的时候, 其实js把这句话看成是2个阶段的事, var a 发生在编译阶段, a = 'laowang’发生在执行阶段. 然后 var a会被提升到当前作用域的最前面, a = 'laowang’留在原地等待执行阶段。

​ 在ES6之前,我们都是用var来声明变量,而且JS只有函数作用域和全局作用域,没有块级作用域,所以{}限定不了var声明变量的访问范围。ES6新增的let,可以声明块级作用域的变量。

​ ES6 明确规定,如果区块中存在let和const命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。总之,在代码块内,使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”(temporal dead zone,简称 TDZ)。

​ let不允许在相同作用域内,重复声明同一个变量。

第五节 Object Array

创建对象并赋值

// let person=new Object();
// person.name="laowang";
// person.age=29;
// person.height=180;
		var person ={
            "name":"laowang",
            "age":29,
            "height":180
        }

额外的访问方式:用方括号访问

console.log(person["age"]); 

这样可以在给对象传参时不写具体值,比如

let a="age";
console.log(person[a]);  //这里传了一个变量去寻找。

JS数组的长度会自动扩展,但不应利用。

let colors=["green","yellow","red"];
colors[0]="blue";
colors.length;
colors[8]="pink";
console.log(colors);

Array.isArray() 检测是否数组对象

console.log(colors.join("|"));  //以 | 作为间隔打印输出colors的属性

.push() 压入数组(从最后加入新元素) .pop() 以栈的方式取(最后入栈) .shift() 以队列的方式取(最先入队) .unshift() 逆向队列的加入数组(从最前面加入新元素)

数组的排序: array.sort() //按自然增长排序 array.reverse() //逆转

数组的拼接:array.concat(); //可以给数组拼接字符串、data、其他数组

数组的删除:arrays.splice();

let colors=["green","red","yellow","pink"];
colors.splice(0,1); //从0号元素开始,删除一个元素

数组的插入:

colors.splice(2,0,"blue","“black"); //从起始的index (2) 开始,删除0个,插入blue,black

数组的foreach循环 : item 代表每次循环的元素,index 角标

colors.forEach(function (item,index,array) {
    console.log(item);
    console.log(index);
    console.log(array);
})

数组的every判断:

let num=[1,3,4,2,6,5,7];
let flag=num.every(function (item,index,array) {	//每个item都满足条件才能返回true
    return (item<4);
})
console.log(flag);	//输出false

数组的filter(过滤器):

let newNum=num.filter(function(item){
    return item>4;
})
console.log(newNum);  //打印出[6,5,7]

filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。

注意: filter() 不会对空数组进行检测。

注意: filter() 不会改变原始数组。

数组的map:

let newNum=num.map(function(item){
    return item*2;
})
console.log(newNum);

map() 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。

map() 方法按照原始数组元素顺序依次处理元素。

数组的 reduce(归并操作):

var sum=num.reduce(function (prev,cur,index,array) {
    return prev+cur;
})
console.log(sum);

reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。

reduce() 可以作为一个高阶函数,用于函数的 compose。

注意: reduce() 对于空数组是不会执行回调函数的。

数组的some:

some() 方法用于检测数组中的元素是否满足指定条件(函数提供)。

some() 方法会依次执行数组的每个元素:

  • 如果有一个元素满足条件,则表达式返回true , 剩余的元素不会再执行检测。
  • 如果没有满足条件的元素,则返回false。

第六节 Date 正则表达式RegExp Function

RegExp

格式: /pattern/modifiers;

let re =new RegExp("a","i");
//匹配11手机号
        let re = /^[1][3,5,7,8][0-9]{9}$/;
        let mobile="18947637845";
        console.log(re.test(mobile));

modifiers

g (全文查找出现的所有 pattern)
i (忽略大小写)
m (多行查找)

正则表达式中的特殊字符

^ 匹配一个输入或一行的开头,/^a/匹配"an A",而不匹配"An a"

$ 匹配一个输入或一行的结尾,/a$/匹配"An a",而不匹配"an A"

* 匹配前面元字符0次或多次,/ba*/将匹配b,ba,baa,baaa

+ 匹配前面元字符1次或多次,/ba*/将匹配ba,baa,baaa

? 匹配前面元字符0次或1次,/ba*/将匹配b,ba

(x) 匹配x保存x在名为$1…$9的变量中

x|y 匹配x或y

{n} 精确匹配n次

{n,} 匹配n次以上

{n,m} 匹配n-m次

[xyz] 字符集(character set),匹配这个集合中的任一一个字符(或元字符)

[^xyz] 不匹配这个集合中的任何一个字符

[\b] 匹配一个退格符

\b 匹配一个单词的边界

\B 匹配一个单词的非边界

\d 匹配一个数字字符,/\d/ = /[0-9]/

\D 匹配一个非字数字符,/\D/ = /[^0-9]/

\n 匹配一个换行符

\r 匹配一个回车符

\s 匹配一个空白字符,包括\n,\r,\f,\t,\v等

\S 匹配一个非空白字符,等于/[^\n\f\r\t\v]/

\t 匹配一个制表符

\v 匹配一个重直制表符

\w 匹配一个可以组成单词的字符(alphanumeric,这是我的意译,含数字),包括下划线,如[\w]匹配"$5.98"中的5,等于[a-zA-Z0-9]

\W 匹配一个不可以组成单词的字符,如[\W]匹配" 5.98 &quot; 中 的 5.98&quot;中的 5.98",等于[^a-zA-Z0-9]。

替换字符串

​ stringObject.replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。

stringObject.replace(regexp/substr,replacement)

切割字符串

var sArray=str.split("A");
console.log(sArray);

Function

JS中,函数可以接受函数的参数(函数也被当作一种数据类型)

function callFunction(someFunction,arg) {
    return someFunction(arg);
}

抽离比较器函数作为参数返回,可以达到多种相同判断逻辑的排序调用同一个比较器函数

var array=[person1,person2];
console.log(array);
array.sort(createComparator("age"));
function createComparator(propertyName){
    return function (object1,object2) {
        var value1=object1[propertyName];
        var value2=object2[propertyName];
        if(value1>value2){
            return 1;
        }
        if(value1<value2){
            return -1;
        }
        else{
            return 0;
        }
    };
}
console.log(createComparator.length); //打印建议接收参数的个数长度,此处为1 

在 JS 对象中,调用属性一般有两种方法——点和中括号的方法。

点方法是在对象名后面跟上属性名,而中括号方法里的索引存放与属性名字相同的字符串

点方法后面跟的必须是一个指定的属性名称,而中括号方法里面可以是变量。

var haha = "name";
console.log(obj.haha); // undefined
console.log(obj[haha]); // cedric

.apply() 方法:改变作用域

window.color="red";
var o={color:"green"};
function showColor() {
    console.log(this.color);
}
showColor();	//输出red
showColor.apply(o);		//输出green

apply传参方法

function sum(num1,num2) {
    return num1+num2;
}
function callSum1(num1,num2){
    return sum.apply(this,arguments);
}
function callSum2(num1,num2) {
    return sum.apply(this,[num1,num2]);
}
console.log(window);

.call() 方法

function sum(num1,num2) {
    return num1+num2;
}
function callSum2(num1,num2) {
    return sum.apply(this,num1,num2); //传参时受到约束
}
console.log(window);

apply()方法 接收两个参数,一个是函数运行的作用域(this),另一个是参数数组。

call()方法 第一个参数和apply()方法的一样,但是传递给函数的参数必须列举出来。

.substr() 方法

可在字符串中抽取从 start 下标开始的指定数目的字符。

stringObject.substr(start,length)

start

要抽取的子串的起始下标。必须是数值。如果是负数,那么该参数声明从字符串的尾部开始算起的位置。也就是说,-1 指字符串中最后一个字符,-2 指倒数第二个字符,以此类推。

length

可选。子串中的字符数。必须是数值。如果省略了该参数,那么返回从 stringObject 的开始位置到结尾的字串。

var falseObject=new Boolean(false);
var fal=false;
var result="false"&&true;   //true
//var result=falseObject&&true;     //true
//var result=falseObject.valueOf()&&true;     //false
console.log(result);

Number类型

let number=10;
console.log(number.toFixed(2));
let number=124364;
console.log(number.toExponential(1));
console.log(number.toPrecision(2));
let s1="lao wa ng";
console.log(s1.indexOf(" "));
console.log(s1.slice(3,5));

对网址编码为了使浏览器更好的识别,解码可以进行字符串操作

var www=encodeURI("http://coder520.com/courses/36/   279");
console.log(www);
//能以编码表示出空格
var www1=encodeURIComponent("http://coder520.com/courses/36/   279");
//替换所有特殊符号
console.log(www1);
window.location.href=encodeURI("http://coder520.com");
//控制浏览器的跳转时最好encode

.eval()

eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码。

Math

第八节 对象属性类型

JS中没有类的概念

属性类型

1.数据属性(控制数据是不是能拿)

configurable:控制属性是否可以被delete

enumerable:是否可枚举,是否能通过for in 循环返回该属性

writable:是否可修改

用 Object.getOwnPropertyDescriptors(obj) 可以获取对象的所有属性,包括属性的特性。

let person={
    name:"laowang",
    age:29
}
Object.defineProperty(person,"name",{
    configurable:false,
    value:"laoli"
})
delete  person.name;  //无效
console.log(person.name);

2.访问器属性

configurable

enumerable

set

get

JQuery了解

语法

基础语法是:$(selector).action()

  • 美元符号定义 jQuery
  • 选择符(selector)“查询”和“查找” HTML 元素
  • jQuery 的 action() 执行对元素的操作

.ready()

​ 当 DOM(文档对象模型) 已经加载,并且页面(包括图像)已经完全呈现时,会发生 ready 事件。由于该事件在文档就绪后发生,因此把所有其他的 jQuery 事件和函数置于该事件中是非常好的做法。

选择器

jQuery 使用 CSS 选择器来选取 HTML 元素。

$(“p”) 选取

元素。

$(“p.intro”) 选取所有 class=“intro” 的

元素。

$(“p#demo”) 选取所有 id=“demo” 的

元素。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值