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),并以易于阅读和打印的格式显示。

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

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

var arr = new Array(3)
arr[0] = "10"
arr[1] = "1000"
arr[2] = "1"

document.write(arr + "<br />")
document.write(arr.sort(sortNumber))
</script>
结果:
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()的值;
  • && 优先级高于 ||

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方法

(图中的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);
打印结果

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...的方法也可以获取到。

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>test</title>
<script>
function show(){
    var el = document.getElementsByName("demoA1 demoSpan");
    alert(el.length)
}
</script>
</head>
<body>
<h1>我的第一个 JavaScript 程序</h1>
<p id="demo" name="demo" class="demoA1">这是一个段落
    <span name="demoA1 demoSpan" class="demoA1 demoSpan">spanspan</span>
</p>
<p id="demo" name="demo" class="demoA2">这是一个段落
    <span name="demoSpan" class="demoSpan">spanspan2</span>
</p>

<button type="button" onclick="show()" >点击</button>
</body>
</html>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,406评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,732评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,711评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,380评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,432评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,301评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,145评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,008评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,443评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,649评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,795评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,501评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,119评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,731评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,865评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,899评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,724评论 2 354

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,654评论 18 139
  • 《裕语言》速成开发手册3.0 官方用户交流:iApp开发交流(1) 239547050iApp开发交流(2) 10...
    叶染柒丶阅读 26,734评论 5 19
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,630评论 18 399
  • 喜欢一个人,就带她来厦门 爱一个人,就带去鼓浪屿
    人坏坏阅读 320评论 0 0
  • 每年夏天,若无特别的事,都会回到儿时的小镇,一来为陪陪父母,二来也算是避暑。 小镇的名字曰杨柳,颇有点儿诗情画意,...
    余思之阅读 489评论 1 5