原声js手写笔记

js基础笔记

其他类型 转 Number(三种方法);

  1. parseInt() 作用:转化为整数; 返回:整数 或 NaN

    规律:从第一个字符开始转换,如果不是数字,直接输出NaN;如果是数字则依次往后,直到碰到不是数字的,直接输出已经转换好     的数字。
    
  2. parseFloat() 作用:转化为小数,或叫浮点数; 返回:小数 或 NaN

    规律:和parseInt()类似
    
  3. Number() 用法、功能和parseFloat()类似 但也有不同的地方
    parseFloat(true);

  4. Number(true);

  5. Number(false);

其他类型 转 字符串(三种方法);

1…toString() 注意:undefined和null不能使用这种方式变成字符串

2.String()

3.+ 例子 1 + ‘’; //1(是字符串 ‘1’)

其他类型 转 Boolean

  • Boolean()
    Boolean(1) // true

    // 特别注意:只有6种情况会返回false,别的都返回true
    // false、null、undefined、""(空字符串)、0、NaN
    

操作符

三元表达式;

 语法: 表达式1 ? 表达式2 : 表达式3;

  var num1 = 10;
  var num2 = 9;
  var max;
  // if (num1 > num2) {
  //   max = num1;
  // }
  // else {
  //   max = num2;
  // }

  // 三元表达式:结果返回;
  max = num1 > num2 ? num1 : num2;
  alert(max);

switch-case 语句

  1. case的判断等价于===

  2. 执行的代码里的break不是必须的,但是如果没有break,会继续往下执行;直到遇到下一个break;

  3. switch-case的使用场景

  4. 判断逻辑比较简单分支比较多 例如:

    var xq = prompt(“输入星期:”);
    switch (xq) {
    case “一”:
    alert(“逛街”)
    break;
    case “二”:
    alert(“再逛街”)
    break;
    case “三”:
    alert(“学习”)
    break;
    case “四”:
    alert(“睡觉”)
    break;
    case “五”:
    alert(“约会”)
    break;
    case “六”:
    alert(“电影”)
    break;
    case “日”:
    alert(“下棋”)
    break;
    default:
    alert(“输入不是星期”);
    break;
    }

流程控制-循环

while 循环

//语法; 
while (条件表达式) {
  // 循环体  就是重复执行的代码
}
//示例;
var num = 1;
while (num <= 3) {
  console.log(num);
  num++;
}

break

  • 作用:彻底跳出循环
  • 针对:所有循环(while、for、do-while)

continue

  • 作用:跳出这一次的循环
  • 针对:所有循环(while、for、do-while)

数组去重

var arr = [1, 3, 5, 6, 7, 3, 5, 7, 2, 4, 2];
var arr_new = [];
for (var i = 0; i < arr.length; i++) {
  var isRepeat = false;
  for (var j = i + 1; j < arr.length; j++) {
    if (arr[i] === arr[j]) {
      isRepeat = true;
      break;
    }
  }
  if (isRepeat === false) {
    arr_new[arr_new.length] = arr[i];
  }
}
console.log(arr_new);

冒泡排序

 //冒泡排序
var arr = [5, 4, 3, 2, 1, ];
for (var i = 0; i < arr.length - 1; i++) { //外层循环趟数
     for (var j = 0; j <= arr.length - i - 1; j++) { //里面循环趟数 每一趟的交换次数
   // 内部交换两个变量的值 前一个和后面一个数组元素相比较
     if (arr[j] > arr[j + 1]) {
        var temp = arr[j];
         arr[j] = arr[j + 1];
          arr[j + 1] = temp;
         }
     }
 }

 console.log(arr);

字符串转数组

//语法:
字符串.split(指定分隔符)
//示例
var str = '12,88,72,6';
var arr = str.split(',');
console.log(arr);   // 输出 ['12','88','72','6']

获得一个随机数

//语法:
Math.random();
//示例:
// 获取随机数
var r = Math.random();

// 输出一个在 [0,1) 之间的浮点数,可以得到0,但是无法得到1
console.log(r);

//拓展:输出0-78的一个随机数
var r = Math.random();  // [0, 1)
r = r * 79;        // [0, 79)
r = Math.floor(r);   // [0, 78]

arguments

  • 是什么?arguments是一个获取了所有实参的伪数组,它是函数内部的变量(不是我们声明的,也不需要我们声明)
  • 有什么用?上面我们多传的一个参数 “1元” 在函数体内无法获取到,但是通过arguments就可以获取到了
  • arguments 这个东西看起来像数组,但是其实不是一个数组,我们管它叫 伪数组。它具有数组的长度和顺序等特征。本质为对象

作用域

作用域分为:

  • 全局作用域(函数的外面):变量能在JS代码里的任何位置都可以访问
  • 局部作用域(函数的里面):变量只能在局部的范围内才能进行访问,出了这个范围就访问不到了
  • 作用:避免相同的变量名的冲突

作用域链

  • 是什么?内部函数访问外部变量时,采用的是链式查找方式,一层一层往外部找
  • 就近原则

预解析

  • 是什么?JS代码不是一下子就在浏览器内执行,而是先对JS代码进行预解析。其实就是把你写的js代码先看一遍,顺便做一些小操作
  • 做了什么小操作?把变量声明函数声明提升到当前作用域的最顶端,只提升声明,不提升赋值

内置对象

Math对象

  • Math.random(x);这个方法的作用是生成一个 [0,1) 之间的随机浮点数
    var r = Math.random();
    // 每次执行等到的数字都不一样
    console.log®;
  • Math.floor(x) 把一个浮点数进行向下取整
    console.log(Math.floor(3.1)); // 3
    console.log(Math.floor(3.9)); // 3
    console.log(Math.floor(-3.1)); // -4
    console.log(Math.floor(-3.9)); // -4
  • Math.round(x) 把一个浮点数进行四舍五入取整
    console.log(Math.round(3.1)); // 3
    console.log(Math.round(3.9)); // 4
    console.log(Math.round(-3.1)); // -3
    console.log(Math.round(-3.9)); // -4
  • Math.ceil(x) 把一个浮点数进行向上取整
    console.log(Math.ceil(3.1)); // 4
    console.log(Math.ceil(3.9)); // 4
    console.log(Math.ceil(-3.1)); // -3
    console.log(Math.ceil(-3.9)); // -3
  • Math.abs(x) 求一个数的绝对值(正数)
    console.log(Math.abs(3)); // 3
    console.log(Math.abs(-3)); // 3
  • Math.max(x,y…) 求多个数字中的最大值
    console.log(Math.max(10,20)); // 20
    console.log(Math.max(8,4,5,7,3)); // 8
  • Math.min(x,y…) 求多个数字中的最小值
    console.log(Math.min(10,20)); // 10
    console.log(Math.min(8,4,5,7,3)); // 3

练习一:点击页面,随机改变颜色

  • 生成0-255之间的随机数,变为整数,封装为函数;

  • 生成三个0-255之间的随机整数,调用三次;

  • 组成 rgb(随机红色,随机绿色,随机蓝色) 的格式,也封装为函数;

    function getRandom() {
      return Math.floor(Math.random() * (255 + 1));
    }
    
    function getRandomColor() {
      var r = getRandom();
      var g = getRandom();
      var b = getRandom();
      var color = 'rgb(' + r + ',' + g + ',' + b + ')';
      return color;
    }
    
      // 这个在后期会学,现在不用理解
    document.onclick = function () {
      var color = getRandomColor();
      document.body.style.backgroundColor = color;
    }
    

随机取整

Date(它是一个构造函数,需要通过new来创建对象)

创建Date对象的语法:

var date = new Date(); // 得到的是你的计算机当前的时间对象
  • 获取年月日时分秒

    console.log(date.getFullYear()); // 年份
    console.log(date.getMonth()+1); // 月份,注意:从0开始

    // 当前日 为什么不是getDay() 英语:日期date,day某天;
    console.log(date.getDate());

    console.log(date.getHours()); // 小时,0-23
    console.log(date.getMinutes()); // 分钟 , 0-59
    console.log(date.getSeconds()); // 秒数 , 0-59
    console.log(date.getMilliseconds()); // 毫秒 0-999 , 1秒 = 1000毫秒

  • 创建一个指定日期的对象

    // 给一个日期格式字符串
    var date = new Date(‘2019-01-01’);

    // 分别传入年月日时分秒。注意传入的月份是从0开始算的
    var date = new Date(2019,0,1,12,33,12);

  • 获取从1970年1月1日到现在的总毫秒数,常说的时间戳

    var date = new Date();

    console.log(date.valueOf());
    console.log(date.getTime());
    console.log(1*date);
    console.log(Date.now());

倒计时案例 重点

数组判断

方法1--------instanceof 运算符 它可以用来检测是否为数组

方法2--------Array.isArray(参数) 它可以用来检测是否为数组 H5新增的方法 ie9以上才支持!

注意 Array.isArray要优先于instanceof

添加删除数组元素的方法

翻转数组

1.reverse() 是翻转数组的

2.sort() 是实现冒泡排序的 但是这个方法有小问题, ()里面需要跟个函数 如图下

数组索引的方法 根据元素或者条件查找索引

1.indexOf:根据元素查找索引,返回值为:

  • 如果这个元素在数组中,返回索引
  • 否则返回-1
  • 如果有多个相同元素 它只返回第一个满足条件的索引号
  • var arr = [10,20,30]
    console.log(arr.indexOf(30));  //  2
    console.log(arr.indexOf(40));  // -1
    
    lastindexOf 是从后查找(了解)

去重新方法

去重

2.findIndex: 根据条件查找索引,返回值为:

  • 满足条件的第一个元素的索引
  • 如果没有,则返回-1
  • // findIndex的参数为一个函数
    // 形参为每一个数组的元素
    数组.findIndex(function (形参) { 
      return 条件表达式;
    })
    var arr = [10, 20, 30];
    var res1 = arr.findIndex(function (item) {
      return item >= 20;
    });
    
    
    console.log(res1);  
    var res2 = arr.findIndex(function (item) {
      return item >= 50;
    });
    console.log(res2);
    

数组转化为字符串

数组转化为字符串

join分隔符 用什么符号都可以分割

拼接-concat

作用:拼接数组(不改变原来数组

返回值:一个新的数组

示例:

var arr1 = [1,2,3];
var arr2 = [4,5,6];
var arr3 = [7,8,9];
var res = arr1.concat(arr2,arr3);
console.log(res);

// 复制一个数组
var arr_1 = arr.concat();

截取-slice

作用:截取数组(不改变原来数组

返回值:一个新的数组

示例:

var arr = ['a','b','c','d','e'];
// 表示 从下标1(包括),截取到下表为4(不包括),
var res = arr.slice(1, 4);

// 如果不给第二个参数,默认就是把从start开始,到length结束的所有的元素截取
var arr_1 = arr_2.slice(1);

// 复制数组:如果省略两个参数,start默认是0,end默认是length
var arr_1 = arr_2.slice();

复制

var arr = [10,20,30,40,50];
var new_arr = arr;   // 直接给,可以么?

var new_arr = [];
arr.forEach(function(item,index,arr){
  new_arr.push(item)
});

var new_arr = arr.filter(function(item,index,arr){
  return item;
});

var new_arr = arr.concat();

var new_arr = arr.slice();

字符串 的内置对象 方法

查找

  • indexOf

  • str[index] H5新增的 有兼容性问题 和indexOf功能一样!

    // 这个方法用于查找某个字符串是否包含于另一个字符串
    var str = ‘我爱中华人民共和国’;
    console.log(str.indexOf(‘中华’));

  • lastIndexOf 用法和indexOf一样,只不过是从后面开始找

  • charAt: 根据位置返回字符

    // 这个方法用于获取字符串中位于指定位置的字符
    var str = ‘我爱中华人民共和国’;
    console.log(str.charAt(2));

  • charCodeAt 作用: 返回ASCII码判断用户按的哪个键

    // 这个方法用于获取字符串中位于指定位置的字符的ASCII码
    var str = ‘abcdef’
    console.log(str.charCodeAt(0));

转为数组-split

// 这个方法用于将一个字符串以指定的符号分割成数组
var str = '刘备|关羽|张飞';
var arr = str.split('|');
console.log(arr);
var arr = str.split('');
console.log(arr);

拼接

  • concat 拼接(不改变原来数组

    // 这个方法用于连接多个字符串,其作用相当于 + 操作符
    var res = “abc”.concat(‘def’,‘ghi’);
    console.log(res);

截取

  • substring()

    var str = ‘我爱中华人民共和国’;

    // 从索引2开始,到索引4结束,得到之间的字符,不包含索引4的字符
    var res = str.substring(2,4);
    console.log(res);

  • slice(参数可以为负数)

    // 这个方法用于获取字符串中的部分字符
    var str = ‘我爱中华人民共和国’;
    var res = str.slice(2,4);// 从索引2开始,到索引4结束,得到之间的字符,不包含索引4的字符
    console.log(res);

    // 看起来和substring 没有啥区别,
    // slice()可以设置参数为负数,slice()方法在遇到负的参数的时候,会将这个负值与字符串的长度相加。
    console.log(str.slice(-6,7));
    console.log(str.slice(2,-5));
    console.log(str.slice(-9,-7));

  • substr (第二个参数代码要截取的字符串的长度)

    var str = ‘我爱中华人民共和国’;
    var res = str.substr(2,2);

替换

replace(被替换的字符, 替换的字符)

注意 只会替换第一个字符

分割字符串 转为数组

split(分隔符)

文档

  • MDN - https://developer.mozilla.org/zh-CN/ (官方、比较权威、新且全)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值