javascript小点

1 将函数的实际参数转换成数组的方法
  • 1:var args = Array.prototype.slice.call(arguments);
  • 2:var args = [].slice.call(arguments, 0);
  • 3:遍历
var args = [];
for (var i = 1; i < arguments.length; i++) {
args.push(arguments[i]);
}

2 把args数组中所有的子项展开传递给一个函数作为参数
  • add.apply(null, args); // (ES5)
  • add(...args); // (ES6)

3 JSON.parse()和JSON.stringify()
  • JSON.parse():字符串转为对象
var str = '{"name":"huangxiaojian","age":"23"}'
JSON.parse(str);
结果:
{ 
  age:23,
  name:"huangxiaojian",
  _proto_:Object
}

注意:单引号写在{}外,每个属性名都必须用双引号,否则会抛出异常。

  • JSON.stringify():对象转为字符串
var a = {a:1,b:2}
JSON.stringify(a);
结果:
"{"a":1,"b":2}"

4 console.dir()和console.log()
  • console.log():会在浏览器控制台打印出信息。
  • console.dir():可以显示一个对象所有的属性和方法。dir方法用来对一个对象进行检查(inspect),并以易于阅读和打印的格式显示。
javascript小点_第1张图片

5 html()和text()
  • html()方法取得第一个匹配元素的内容,而text()方法是取得所有匹配元素包含的内容。
  • html()方法取得内容html内容,而text()方法取得是文本内容。

6 sort()使用方法
  • 如果调用该方法时没有使用参数,将按字母顺序(字符编码)对数组中的元素进行排序。要实现这一点,首先应把数组的元素都转换成字符串(如有必要),以便进行比较。
  • 如果想按照其他标准进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下:
    若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
    若 a 等于 b,则返回 0。
    若 a 大于 b,则返回一个大于 0 的值。

结果:
10,1000,1
1,10,1000

若将比较函数改为function sortNumber(a,b){b-a},结果则变为
10,1000,1
1000,10,1
比较函数返回一个小于0的数则第一个参数(a)排在前面,返回大于0的数则第一个参数(a)排在后面

7 &&和||在javascript中的另类用法
  • a() && b() :如果执行a()后返回true,则执行b()并返回b的值;如果执行a()后返回false,则整个表达式返回a()的值,b()不执行;
  • a() || b() :如果执行a()后返回true,则整个表达式返回a()的值,b()不执行;如果执行a()后返回false,则执行b()并返回b()的值;
  • && 优先级高于 ||
  • javascript小点_第2张图片

8 可以在if()语句中赋值
tag = false
if(tag = !tag){
} else {
}

tag = false;
那么:!tag肯定为true
然后:tag = !tag
所以:tag = true
也就是说:if(tag = !tag) 得到的tag值为true,会执行if语句。
这种用法的方便之处,例如:

var is_window = function() {
    if(window == undefined) {
        return false;
    } else {
        return window;
    }
}
if(win = is_window()) {
    console.log(win);
} else {
    console.log('不存在window');
}

9 js中点表示法和数组表示法

可以使用 “ . ”、“ [] ” 来访问对象属性
只能使用 “ . ” 来访问对象的方法

点表示法一般作为静态对象使用时来存取属性。
而数组表示法在动态存取属性时就非常有用。

在使用方括号语法时,应该将要访问的属性
字符串的形式放在方括号

alert(person["name"]); //"Nicholas"
alert(person.name); //"Nicholas"
或者通过变量访问属性:
var propertyName = "name";
alert(person[propertyName]); //"Nicholas"

10 获取当前日期及30天后的日期
  • 自己写的方法
    通过if语句判断年份是否需要加1,下个月的天数是否小于上个月的当前日期,再拼接字符串,转为Date类型且使用format进行格式化。
var dateFormat = 'yyyy-MM-dd';
var date = new Date();
var initDateStartYear = date.getFullYear();
var initDateEndMonth = new Date().getMonth() + 2;
var initDateStartDate = date.getDate();
//第二个月 的总天数
var initEndDate = new Date(initDateStartYear,initDateEndMonth,0).getDate();
//第二个月超过12时,年份+1,月份变为1
 if(initDateEndMonth > 12){
        initDateStartYear += 1 ;
        initDateEndMonth = initDateEndMonth - 12;
}
//第二个月的总天数 小于 第一个月的总天数,第二个月天改为第二个月的最大天数
if(initEndDate < initDateStartDate) {
       initEndDate =  new Date(initDateStartYear,initDateEndMonth,0).getDate();
       initDateStartDate =  initEndDate;
}
initDateEndStr = initDateStartYear + '-' + initDateEndMonth + '-' + initDateStartDate;
this.dateStart = new Date().format(dateFormat);
this.dateEnd = new Date(initDateEndStr).format(dateFormat);
console.log(this.dateStart);
console.log(this.dateEnd);
  • js的setDate方法
javascript小点_第3张图片

(图中的60改为30)
setDate()方法可以通过增加的天数,自动改变月份和年份,不需要自己改变


11 typeof null ==="object"

12 js中两个等号(==)和三个等号(===)的区别
  1. "=="表示:equality -> 等同 的意思,"=="使用两个等号时,如果两边值的类型不同的时候,是要先进行类型转换后,才能做比较。
  2. "==="表示:identity -> 恒等 的意思,"==="使用三个等号时,是不需要做类型转换的,如果两边值的类型不同,就表示一定是不等的。

13 表单序列化注意点

我们先来讲讲表单中 中readonly和disabled的区别:

  • readonly只对input和textarea有效,
  • disabled对于所以的表单元素都是有效的,包括radio,checkbox等

如果表单中使用的disabled那么用户是不能选择的,也就是说这个文本框是无法获取到焦点的,而readonly是可以获取到焦点,只是不能修改,为只读
最重要的一点, 在发送表单的时候,表单的控件属性没有name属性该字段不会发送,也不会形成键值对;表单控件属性是disabeld,则该字段不会发送,也不会形成键值对,没有选中的也不会发送。


14 this指向

首先分析this所在的函数是当做哪个对象的方法调用的,则该对象就是this所引用的对象。


15 数组的 length 属性-不是只读的

数组的 length 属性很有特点——它不是只读的。通过设置这个属性,可以从数组的末尾移除项或向数组中添加新项。请看下面的例子:

var colors = ["red", "blue", "green"]; // 创建一个包含 3 个字符串的数组
colors.length = 2;
alert(colors[2]); //undefined
数组 colors 一开始有 3 个值。将其 length 属性设置为 2 会移除最后一项(位置为
2 的那一项),结果再访问 colors[2] 就会显示 undefined 了。

var colors = ["red", "blue", "green"]; // 创建一个包含 3 个字符串的数组
colors.length = 4;
alert(colors[3]); //undefined
其 length 属性设置为大于数组项数的值,则新增的每一项都会取得 undefined 值

16 js设置css样式
  1. 如果属性有'-'号,就写成驼峰的形式(如marginLeft
  2. 如果想保留 - 号,就中括号的形式
    element.style['text-align'] = '100px';
    element.style.height = '100px';
  3. 直接设置属性(只能用于某些属性,相关样式会自动识别)
    element.setAttribute('height', 100);
    element.setAttribute('height', '100px');

17 split()

split() 方法用于把一个字符串分割成字符串数组。
提示: 如果把空字符串 ("") 用作 separator,那么 stringObject 中的每个字符之间都会被分割。
注意: split() 方法不改变原始字符串。

var str="How are you doing today?";
var n=str.split();
-->How are you doing today?

var str="How are you doing today?";
var n=str.split("");
-->H,o,w, ,a,r,e, ,y,o,u, ,d,o,i,n,g, ,t,o,d,a,y,?

var str="How are you doing today?";
var n=str.split("o");
-->H,w are y,u d,ing t,day?

18 正则表达式

po.replace(/\d|(|)/g, "") 过滤po字符串中的数字和括号


19 concat

concat() 方法用于连接两个或多个数组。
该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本。
语法:
arrayObject.concat(arrayX,arrayX,......,arrayX)
参数描述:
arrayX 必需。该参数可以是具体的值,也可以是数组对象。可以是任意多个。
返回值
返回一个新的数组。该数组是通过把所有 arrayX 参数添加到 arrayObject 中生成的。如果要进行 concat() 操作的参数是数组,那么添加的是数组中的元素,而不是数组

如下示例:
var a = [];
console.log(a.concat({a:10},1,[2,3]));
console.log(a);
javascript小点_第4张图片
打印结果

20 document.getElementsByName("name1 name2");-有效

getElementsByClassName\getElementsByName可以使用如下的写法:document.getElementsByName("name1 name2");
document.getElementsByName("class1 class2");
注意
1、name1与name2不是父子元素的name,是同一个元素的两个name名(同理class1和class2)。
2、对于display:none的元素,getElement...的方法也可以获取到。





test



我的第一个 JavaScript 程序

这是一个段落 spanspan

这是一个段落 spanspan2

你可能感兴趣的:(javascript小点)