js笔记(view:4004)

1.日期格式处理

var data="2017-11-02";
var date_fix=Number(data.replace(/-/g,""));

2.获取元素索引

<select id="mySelect" v-model="checkName" @change="getsubproject(checkName)">
   <option value="">请选择</option>
   <option v-for="item in checkNameOption">{{item}}</option>
</select>

var x=document.getElementById("mySelect")
alert(x.selectedIndex)

3.获取元素

var x=document.getElementById("ele");
var x=document.getElementsByClassName("ele");
var x=document.getElementsByTagName("p");
var x=document.querySelector(".ele");  //返回匹配指定选择器的第一个元素
var x=document.querySelectorAll(".ele");  //返回所有的元素
x.innerHTML;
x.innerText;
x.value;
x.selectedIndex;

4.保留两位小数

var a = 9.39393; 
a.toFixed(2);

5.map生成新对象数组

let data1=[];
data2.map(function(item){
    let obj={};
    obj.diseaseName=item.diseaseName;
    obj.startTime=item.startTime;
    obj.endTime=item.endTime;
    data2.push(obj);  
});
var data = [[10, 16, 3, 'A'], [16, 18, 15, 'B'], [18, 26, 12, 'C'], [26, 32, 22, 'D'], [32, 56, 7, 'E'], [56, 62, 17, 'F']];
var colorList=['#4f81bd', '#c0504d', '#9bbb59', '#604a7b', '#948a54', '#e46c0b'];
data = data.map(function (item, index) {
    return {
        value: item,
        itemStyle: {
            normal: {
                color: colorList[index]
            }
        }
    };
});

相关函数:reduce()

6.+new Date是什么意思?
JavaScript中可以在某个元素前使用 ‘+’ 号,这个操作是将该元素转换秤Number类型,如果转换失败,那么将得到 NaN。
所以 +new Date 将会调用 Date.prototype 上的 valueOf 方法,而根据 MDN ,Date.prototype.value 方法等同于 Date.prototype.getTime() 。
所以下列代码效果相同:

    console.log(+new Date);  
    console.log(new Date().getTime());  
    console.log(new Date().valueOf());  
    console.log(new Date() * 1);  

7.日期加一天

function formatDate(time) {
 var year = time.getFullYear();
 var month = time.getMonth() + 1;
 var date = time.getDate();
  return year + "-" + month + "-" + date;
}
//格式化函数,将毫秒转化为年月日
var startTime=new Date('2017-11-27');
endTime=startTime.setDate(startTime.getDate()+1);   //天数加1
endTime=new Date(endTime)                           //starttime需要转化为时间对象,结果为毫秒数
endTime=formatDate(endTime);                        //调用函数转化为年月日

7-1.加一个月

var time = new Date()
var endTime = new Date(time.setMonth(time.getMonth()+2))

8.localStorage和sessionStorage

sessionStorage.setItem("my_sessionStorage", "sessiontesttext");
sessionStorage.my_sessionStorage123='sessiontesttext123';

localStorage.setItem("my_localStorage", "localtext");
localStorage.my_localStorage123='localtext123';
localStorage.removeItem('my_localStorage');

localStorage.clear();   //清空全部localStorage

9.concat() 方法用于连接两个或多个数组,该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本。

arrayObject.concat(arrayX,arrayX,......,arrayX)

10.option获取val及text

var myselect=document.getElementById('test');  //拿到select对象
var index=myselect.selectedIndex;              //拿到选中项的索引
var val=myselect.options[index].value;         //选中项options的value
var text=myselect.options[index].text;         //拿到选中项options的text

jquery实现

var options=$('#test option:selected');        //获取选中的项
options.text();                                //拿到选中项的文本
options.val();                                 //拿到选中项的值
$('#test).val()                                //拿到选中项的值,同上面方法
$('#test).get(0).selectedIndex;                //选中项的索引

11.splice()和slice()
splice() 方法向/从数组中添加/删除项目,然后返回被删除的项目。

arrayObject.splice(index,howmany,item1,.....,itemX)

slice() 方法可从已有的数组中返回选定的元素。

arrayObject.slice(start,end)

12.selectionStart获取textarea中光标位置

13.刷新location.reload()与后退onclick="window.history.go(-1)"

14.函数中的arguments

function add(){
  var sum=0;
  for(var i=0;i<arguments.length;i++){
    sum+=arguments[i];
  };
  return sum;
}

add(11,2,3,2,100);

15.疑惑:apply,call,
16.日期格式化

function pad2(n) { return n < 10 ? '0' + n : n }
function dateFormat(date) {
    return date.getFullYear().toString() + pad2(date.getMonth() + 1) + pad2(date.getDate())
}

17.json文件中,属性名必须用双引号包裹,并且所有引号必须为双引号

18.手机号隐藏中间4位

var phone = '15151515151';
phone.replace(/(.{3}).*(.{4})/, '$1****$2')

19.URL参数解析

var paramsString = "q=URLUtils.searchParams&topic=api";
var searchParams = new URLSearchParams(paramsString);
var topic = searchParams.get("topic");

20.年月日

var myDate = new Date();
myDate.getYear();       //获取当前年份(2位)
myDate.getFullYear();   //获取完整的年份(4位,1970-????)
myDate.getMonth();      //获取当前月份(0-11,0代表1月)
myDate.getDate();       //获取当前日(1-31)
myDate.getDay();        //获取当前星期X(0-6,0代表星期天)
myDate.getTime();       //获取当前时间(从1970.1.1开始的毫秒数)
myDate.getHours();      //获取当前小时数(0-23)
myDate.getMinutes();    //获取当前分钟数(0-59)
myDate.getSeconds();    //获取当前秒数(0-59)
myDate.getMilliseconds();   //获取当前毫秒数(0-999)
myDate.toLocaleDateString();    //获取当前日期
var mytime=myDate.toLocaleTimeString();    //获取当前时间
myDate.toLocaleString( );       //获取日期与时间

21.sort排序

var nums = [4, 8, 1, 9, 0];
nums.sort((a, b) => a - b);

对象数组排序

function compare( a, b ) {
  if ( a.last_nom < b.last_nom ){
    return -1;
  }
  if ( a.last_nom > b.last_nom ){
    return 1;
  }
  return 0;
}

objs.sort( compare );

一行表示

objs.sort((a,b) => (a.last_nom > b.last_nom) ? 1 : ((b.last_nom > a.last_nom) ? -1 : 0))

22.对象数组判断某属性是否存在

var inventory = [
    {name: 'apples', quantity: 2},
    {name: 'bananas', quantity: 0},
    {name: 'cherries', quantity: 5}
];

function findCherries(fruit) { 
    return fruit.name === 'cherries';
}

console.log(inventory.find(findCherries)); // { name: 'cherries', quantity: 5 }

23.表单验证,金额(数字最大两位小数)


24. 金额千分位

var amount = 1234567.998
Number(parseFloat(amount).toFixed(2)).toLocaleString()      // 结果 1,234,567.99

25.删除字符串中的html标签

str.replace(/<[^>]+>/g,"")

26.昨天

var day1 = new Date();
var yesterday = day1.setTime(day1.getTime()-24*60*60*1000)

27.变量提升

a=2;
var a;
console.log(a);           //2
console.log(a);
var a=2;                  //undefined,定义声明在编译阶段进行,赋值声明在执行阶段进行

28.Nnmber(123).toFixed(2)返回值为字符串

29.数组填充固定值
arr.fill(value[, start[, end]])
相关资料:https://segmentfault.com/a/1190000007651029
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/fill

30.一维数组转为二维

change2Array:function (data, len, arr) {
/**
* @param data 一维数组
* @param len 每个子数组长度
* @param arr 保存的新数组
*/
  if (data.length <= len) {
    arr.push(data)
    return arr
  } else {
    arr.push(data.splice(0, len))
    this.change2Array(data, len, arr)
  }
}

31.数组转对象,展开运算符

var a=['a','b','c']
var b={...a} 

32.双引号替换为单引号

var a = '{"a":"1","b":"2"}'
a = a.replace(/\"/g,"'")

33.字符串超过长度返回…

value.length>12?(value.substring(0,12))+"...":value

34.数字位数不够,进行前补零

function PrefixZero(num, n) {
    return (Array(n).join(0) + num).slice(-n);
}

简要说明如下:
Array(5) => 创建了一个长度为5的空数组
console.log(Array(5));// [empty × 5]
Array(5).join(0) => 用0拼接将数组转换成字符串
console.log(Array(5).join(0));// 0000
Array(5).join(0)+91 => 通过+,实现字符串的拼接
console.log(Array(5).join(0)+91);// 000091
(Array(5).join(0) + 91).slice(-5) => slice(startIndex,endIndex)方法,用于截取
参数说明:
参数是起始位置,含头不含尾,
只有一个参数时,表示从该起始位置一直截取到最后。
参数值为负数时,表示从后往前数,如最后一位,索引是-1

35.生产6位随机数

function mathRand() {
    var num = ''
    for (var i = 0;i < 6;i++) {
      num+=Math.floor(Math.random()*10)
    }
    return num
}

指定区间随机数

function random(min, max) {
    return Math.floor(Math.random() * (max - min)) + min
}

36.比较是否相等
以下值经过两次逻辑非处理!!都会变成false,但是他们之间直接比较却并不一定相等

null == 0       //false
!!null == !!0   //true

null,undefined为原始类型和”,0都不相等,但是null,undefined互相又相等

null == undefined    //true
null == ''           //false

false和null,undefined不相等,

null == false        //false
undefined ==false    //false

false,”,0互相之间相等

'' == false
0 == false
'' == 0

结论:一个逻辑值和另一个值比较,会将值转化为逻辑值再比较,否则就直接比较

0 == 0                     //true
null == null               //true
undefined == undefined     //true
var a = null,b = undefined,c = '',d = 0,e = false

a==b //true
a==c //false
b==c //false
a==d //false
a==e //false

36(1).数字和布尔值比较
结论:数字和布尔值进行比较时,布尔转换为数字,二者再比较。

var a = 'abc'
if(a.indexOf('d')){
  console.log('')  // d不存在返回-1,这里是true
}

-1转为布尔为true,但是数字和布尔比较,会将true先转为数字1,如下:

-1 == true // 结果为false,

js隐式转换规则(链接)

37.window.print打印功能,状态监听
打印窗口关闭:window.onafterprint
打印前:onbeforeprint
媒体查询检测打印状态@media print{}

38.console.dir与console.log区别
console.dir可以显示native code,并且可以显示dom中的所有属性

let $ele = document.querySelector('body')
console.log($ele)
console.dir($ele)

console.log(Promise)
console.dir(Promise)

39.Promise中的语法错误浏览器控制台不会报错,所以务必要在catch中打印出来

40.new Date('2023-05-03'),生成的时间是2023 08:00:00早上八点,比较计算时候需要注意

41.类(class)
子类只要继承父类,可以不写constructor ,一旦写了 ,则在constructor中的第一句话必须是super