JS学习(1)

1.JS命名规则:

  1. 只能由数字、字符、下划线和美元符号($)组成
  2. 不能以数字开头
  3. 不能是保留字和关键字
  4. 大小写敏感

2.数据类型:

弱引用类型: 给赋值什么就是什么数据类型,不建议改变数据类型
值类型(基本类型): 字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol。

复合数据类型/引用数据类型: 统称为object类型.里面包含的object类型、function、 Array、Date、RegExp

3.运算符:

  1. 算数运算符 + - * / %

  2. 关系运算符 > < >= <= != === !==

  3. 逻辑运算符:与&&,或|| 非! 短路运算

  4. 一元运算符 ++ –

  5. 赋值运算符 = += -=

自动数据类型转换: 不同数据类型之间是没有办法进行运算,将数据转成同一数据类型,再进行计算

  1. 其中有一个操作数是字符串,运算符为 + ,别的数据类型会转成字符串,进行字符串拼接
alert("hello"+100);  //hello100
alert("hello"+true);   //hellotrue
alert("hello"+null);    //hellonull
alert("hello"+undefined);  //helloundefined
alert("hello"+NaN);     //helloNaN
  1. 任何数据和字符串 做+以外的操作,那么字符串要先转成数字再去进行运算
    (1) 如果字符串是一个纯数字字符组成的字符串,转成对应的数字
    alert(100-“20”); //80
    (2) 如果字符串中含有纯数字以外的别的字符,转成NaN,NaN和任何数据运算都是NaN
    alert(100-“20a”); //NaN

  2. 除字符串以外的数据,再进行算数运算的时候,先转成数字,再进行运算。

alert(10+true);    //11
alert(10+false);   //10
alert(10-null);     //null=>0 10
alert(10-undefined);   //NaN
alert(10-NaN);    //NaN

[注]计算机时不会进行小数运算(天生有bug)

alert(0.8-0.2);  //0.6000000000000001
alert(10/0);  // Infinity
alert(-10/0); // -Infinity
alert(Infinity+"hello");  // Infinityhello
alert(Infinity+100);   //Infinity

4.强制类型转换:

其他类型转布尔值,非0即真,非空即真
alert(Boolean(""));//false null undefined NaN转布尔值均为false

转数字 Number(),只有数字的字符串,true,false才能转为数字

alert(Number("100a"));//NaN
alert(Number(parseInt("10b0a"))); //10
alert(Number(NaN));  //NaN
alert(Number(undefined));   //NaN
alert(Number(null)); //0
alert(undefined==null);  //true
alert(!Infinity);//false

5.while循环

三种语法:while循环 、 do-while循环、for循环
arguments 是用来存储实际传入的参数
arguments.length 输出当前里面存储的参数个数
访问某一个数据 arguments[下标];

function show(){
alert(arguments[1]);}
show(10,true, "hello",40,50);

6.数组

数组声明

  1. 通过new创建数组 var arr=new Array(100,true, “hello”);
  2. 省略new运算符创建数组 var arr=Array(100,true, “hello”);
  3. 数组常量进行赋值 var arr=[100,true, “hello”]

[注] 前两种方式,如果传入一个数字,代表声明的数组长度
var arr=new array(10);声明一个长度为10的数组

数组的属性

数组.length
访问数组的元素:数组[下标]; 下标从0开始 arr[1]

Math.random() [0,1)

数组遍历: for for…in for…of forEach

for(var i in arr){
	 Document.write(arr[i]+ "<br/>");
 }
 var arr = [1, 2, 3, 4, 5, 6];
arr.forEach(function (item, index, arr) {
        //item当前遍历到的元素
        //index当前哪里到元素的下标
        //arr数组本身
        document.write(item + "," + index + "," + arr + "<br/>");
      });

数组方法:

  1. 栈结构 :
  • 数组.push(参数1,参数2,…)
    功能:给数组的末尾添加元素
    返回值:插完元素以后数组的长度,原数组发生改变
 var arr=[1,2,3,4];
 var res=arr.push(10,11);
 alert(res);    //6
 alert(arr);    //1,2,3,4,10,11
  • 数组.pop()
    功能:从数组末尾取下一个元素
    返回值:取下的一个元素,原数组为去掉元素的数组
var arr=[1,2,3,4,5];
var res=arr.pop();
alert(res);    //5
alert(arr);    //1,2,3,4
  1. 队列结构
  • push
  • 数组.shift() 无参数
    功能:从数组的头部取下一个元素
    返回值:取下的元素,原数组为去掉取下的元素
  • 数组.unshift(参数1,参数2,……)
    功能:从数组的头部插入元素
    返回值:插完元素以后数组的长度,原数组变为插入元素的数组
  1. concat() 拷贝原数组,生成新数组

    合并数组:数组.concat(数组,数据1,数据2…);
    返回值:合并成的新数组原数组不会改变
    [注] 就算传入是数组,数组中元素中的元素要单独拆出来再进行合并

var arr1=[1,2,3];
var arr2=[10,20,30];
var newArr=arr1.concat(arr2, "hello");
alert(newArr);  //1,2,3,10,20,30,hello
alert(newArr.length);  //7
alert(arr1);   //1,2,3
  1. 截取数组元素: 数组.slice(start,end); [start,end)不包含末尾元素
    功能:可用基于当前数组获取指定区域元素[start,end),提取出元素生成新数组
    返回值:生成的新数组,原数组不会发生任何改变

  2. splice() :数组.splice(start,length,数据1,数据2,…);

start:开始截取的位置
length:截取的元素的长度
第三个参数开始:在start位置,插入的元素
返回值:截取下来的元素生成的数据 ,原数组为除去截取下来的元素

先截取元素,然后从第一个参数位置上添加数据

增加

var arr=[1,2,3,4];
var res=arr.splice(1,0, "hello");
alert(res);//空白
alert(arr);  //1,hello,2,3,4

删除

var arr=[1,2,3,4];
var res=arr.splice(1,2);
alert(res);//2,3
alert(arr);  //1,4

修改(先删除,再增加)

var arr=[1,2,3,4];
var res=arr.splice(2,1, "hello");
alert(res);//3
alert(arr);  //1,2,hello,4
  1. join() 数组.join(字符串)

    功能:将数组中的元素,用传入的拼接符,拼接成一个字符串
    返回值:拼接好的字符串,原数组不发生改变

var arr=[1,2,3,4];
var res=arr.join("=");
alert(res); //1=2=3=4
alert(arr);  //1,2,3,4
  1. reverse 逆序 数组.reverse();
    原数组发生改变
var arr=[true,100,8];
arr.reverse();
alert(arr);  //8,100,true 
  1. 数组排序 数组.sort() 默认从小到大排序,按照字符串排序,原数组发生改变
var arr =[30,20,10,50,40];
arr.sort();
alert(arr); //10,20,30,40,50                   
var arr =[30,2,10,5,40];
arr.sort(); 
alert(arr);  // 10, 2, 30, 40, 5

数值大小排序,加入方法
//从小到大排序

var arr =[30,2,10,5,40];
arr.sort(function(value1,value2){
	return value1-value2
}); 

alert(arr);
arr1=[1,2,3,4];
arr2=arr1;
arr1.push(5,6);  //arr1,arr2均改变,指向同一个地址

如果不想改变arr1的值,可以使用concat方法

arr1=[1,2,3,4];
arr2=arr1,concat();
arr2.push(5,6);
  1. 数组.indexOf(item,start);

item任意的数据
start 下标 可以不传入,默认为0
功能:在数组中查找第一次出现item元素下标,从start开始取查找
返回值: -1没有查到 >=0查找到的元素的下标 原数组不发生改变

  1. map()映射 会遍历当前数组,然后调用参数中的方法,返回当前方法的返回值
    map不会改变原有数组,而是将函数执行一次之后的返回值组成一个数组,返回回来
 var arr = [2, 3, 4, 5, 6, 7];
 var newArr = arr.map(function (item, index, arr) {
       return item * 2;
      });
alert(newArr);  //4,6,8,10,12,14
alert(arr);   //2, 3, 4, 5, 6, 7
  1. 过滤 filter() 不会改变原数组
var arr = [2, 3, 4, 5, 6, 7];
var newArr = arr.filter(function (item, index, arr) {
        return item > 5;
 });
alert(newArr); //6,7
alert(arr); //2, 3, 4, 5, 6, 7

  1. 某些 some 在数组中查找是否有符合条件的元素,有的话返回true,没有返回false
    原数组不发生改变 短路操作
var arr = [2, 3, 4, 5, 6, 7];
var newArr = arr.some(function (item, index, arr) {
        return item > 5;
      });
alert(newArr); //true
alert(arr); //2, 3, 4, 5, 6, 7
  1. 每一个 every 每一个都符合条件返回true,否则返回false
    不改变原数组
var arr = [2, 3, 4, 5, 6, 7];
var newArr = arr.every(function (item, index, arr) {
        return item > 1;
      });
alert(newArr); //true
alert(arr); //2, 3, 4, 5, 6, 7
  1. reduce 归并
var arr = [2, 3, 4, 5, 6, 7];
var res = arr.reduce(function (prev, next, index, arr) {
        /* prev 第一次时 下标为0的元素
           第二次开始, 上一次遍历return的值
           next 从下标1开始  当前遍历到的元素
           arr  数组本身
             */
        alert(prev + "," + next);
        return prev + next;
      });
alert(res);  //2,3    5,4,  9,5   14,6   20,7   27

7.声明提升

内存分配,一次分配
预编译: 在所有代码运行之前,计算机将代码从头到尾看一遍,将这个程序需要运行的空间一次性分配好

alert(num);  //弹出undefined
var num=1; 

变量可以声明提升,函数也可以声明提升

声明提升:在当前作用域,声明变量和函数,会直接提升在整个代码的最前面运行
局部作用域,声明提升的是在函数内部

省略var,直接取强制给一个变量赋值,这个比哪里会被JS强制声明为全局变量
【注】不建议,这属于语法错误

function show(){
	num=10;
	alert(num);//10
}
show();
alert(num);//10

8.二维数组

var arr1=[1,2,3,4];
var arr=[true,100,’hello’,arr1];
alert(arr.length);  //4

9.严格模式(写在哪个作用域下,在哪个作用域下生效)

“use strict”;
【注】尽量注意不要严格模式写在全局

  1. 全局变量声明时,必须加var
  2. this不能指向全局变量
  3. 函数内重名属性 (形参不能相同
  4. arguments对象,只存储传实参的值实参改变,arguments值不发生改变
  5. 新增保留字
    implements,interface,let,package,private,protected,public,static ,yield
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值