js入门学习

主要学习资源:“精品奉献.Net全套就业班视频教程-video”的js部分

  • JavaScript 进阶问题列表,从基础到进阶,测试你有多了解 JavaScript,刷新你的知识 2019-7-30
  • 现阶段(2018年)体会:js/css与html共存时,一定采用“三次原则”(如果重复1次或2次copy编码是最有效的,但是超过3次就考虑封装)。因为一个页面js行数经常超过html,采用这个原则应该能减少不少,并且js编码时间比写C#花的长,觉得很有必要在js基础知识上下功夫了。
  • 笔记概览:

jQuery和js互相转换
jQuery获知控件种类
本人工作中常用的js函数汇总及代码段整理、函数汇总
表单和JSON互相转换
Readonly、disabled特点
from元素、上传原理
css–!important、css文件内引用css文件
js文件内引用js文件document.writeln
html中的js封装到外部js文件:用对象
文档流position、float
table的属性“cellpadding, cellspacing”:两脚、鞋
盒子模型
div水平居中(适用于table)
js的历史
js弱类型语言
双等号与三等号
六种数据类型及转化
出现undefined情况、NaN
全局变量,方法体内变量(方法变量,无块级作用域)
js编码规范
预先解析:函数和变量
js版函数重载
匿名函数:0~n个参数的情况下用法
数组的声明和使用、方法
js版的面向对象
js中也有“委托”
window.alert(‘hi’)
查看js函数本体代码,key“函数myFunc全部代码串”
为元素注册事件(注册的函数参数0~n——闭包。Demo key:方法有多个参数)
“心跳、超时”函数
window.event获得点击点相对“房间、楼、地图”坐标
getElement(s)ById/Name/TagName
原型对象prototype
js压缩
不同浏览器的不同点
3个编码函数
匿名函数+递归——callee
apply和call

  • false —— null|underfined|""|0
let rowObj =  null 或 underfined 或 ''NaN0;//下面语句会输出1
if(!rowObj){
	console.log(1);
}else{
	console.log(2);
}
  • 用户通过url请求网站,浏览器会把其封装到报文头发给服务器,服务器响应资源,浏览器会先下载完html文本,然后从上到下解析文本并渲染到页面,当解析到引用的js、css文件时会去下载资源,直到最后一行。至此页面onload结束。而jQuery的$(function(){。。。})是ready后触发(即文本下载完时)。
  • 在什么位置引入js文件,就等同于把文件中代码copy到那个位置。

  • 原理:在同一个<script>内,js引擎会先把函数和变量都挑出来“预解析”(可理解为执行前把它们摘出放到列表中,并且同名时后者覆盖前者),然后在按你写的代码从上到下依次执行。所以,以后函数名千万注意能不重名就不重名。

  • 一个页面“html、css、js”建议分离,不要混在一起。分别写在css文件和js文件中。html标签最多有id、class,方便写相应的js和css代码。

  • jQuery 和js混用注意

jQuery和javascript混搭是没问题的,因为jQuery只是一个Javascript的框架,它封装了Javascript API,提升了各浏览器的兼容性。
混用时要注意:jquery和javascript对象互相之间的转换。
jquery -> javascript :var jsObject=$("#id").get(0);//这样就可以调用js的方法了.
javascript -> jquery :var $object=$(document.getElementById("id"));//这个就可以调用jquery的方法了

  • jquery获取html标签类型:要想通过id得到控件是input是select,还是哪种控件?用$("#"+控件id)[0]
  • 非数值转换为数值:Number()、parseInt()和parseFloat()。
  • 本人工作中经常要使用的js函数汇总:
  • 全选 全不选
  • table和json互转
  • 为控件设置值(清空页面)
  • 设置控件长度等样式
  • 等待图层(超时可自动隐藏)
  • 控件只读 控件可写 $('#btn1,#btn2').attr('disabled','disabled').attr('style','color:#A9A9A9;cursor:not-allowed').attr('title','此时不可用!');
  • 必为数字
  • 文本长度倒计时
  • 新窗口打开 window.open能用layer就用
  • 全部替换
  • 代码段整理
var box = '李炎恢';//检测变量的数据类型。
alert(typeof box);//返回 string
alert(typeof '李炎恢');//返回 string
//----------
/*函数体内可以通过arguments对象来接收传递进来的参数*/
alert(box(1,2,3,4,5,6));	
function box() {
	return arguments[0]+' | '+arguments[1];//得到每次参数的值,参数个数可以随机
}
//----------
var a='ddssffdd';
var b=s.split('d').join('a');//【等同于replace替换,用a替换所有d】(a、d可以是多个字符)
//----------
/*把匿名函数赋值给变量*/
var box = function () {//将匿名函数赋给变量
	return 'Lee';
};
alert(box());	//调用方式和函数调用相似

//----------
var list = document.getElementsByTagName("textarea");
//遍历textarea设置成只读(背景灰,不能写),点击后弹不可改提醒
for (var i = 0; i < list.length; i++) {
	list[i].style.background = "#FFFFFF";//白色.灰色--"#F0F0EE"
	list[i].removeAttribute("readOnly");//list[i].setAttribute("readOnly", true);//设为只读
	list[i].onclick = function () { alert('此时还不能调整!'); };// listS[i].onclick = function () { };//去除alert
}
  • 类库:常用js函数汇总
/*
 *   本js存放常用的工具方法
 */
//根据控件id数组,把结果拼成json串 (["AssessID", "EmpNo"])
function formToJOSN(controls) {
    var dtb = new Array();
    for (var key in controls) {
        var id = '#' + controls[key];
        if ($(id).length > 0) {
            dtb.push('"' + controls[key] + '":"' + $.trim($(id).val()) + '"');
        }
    }
    return "{" + dtb.join(',') + "}";//返回 {"a":"1","b":"2"}
}

//为控件赋值(可清空控件内容,{"select2":"0","select1":""})
function setControlValue(json) {
    var obj = JSON.parse(json);
    for (var key in obj) {
        var v = obj[key];//v是key对应值
        var id = '#' + key;
        if ($(id).length > 0) {
            var controlType = ($(id)[0] + "").toLowerCase();
            if (controlType.indexOf("input") >= 0 
            || controlType.indexOf("textarea") >= 0 
            || controlType.indexOf("select") >= 0)
                $(id).val(v);//设置可写标签:input、select、textarea
            if (controlType.indexOf("span") >= 0)
                $(id).text(v);//设置只读标签,如span等
        }
    }
}

//layer 弹出执行结果(固定时间后自动关闭)
function layerMsg(txt) {
    if (txt.indexOf("成功") >= 0)
        layer.closeAll();
    /*15个文字内是短信息 */
    var closeTime = 3000;//信息短 3秒自动关闭
      var btnArr = [];
      if (txt.length>15) {
          closeTime = 3600000;//信息长 1h自动关闭(目的是让用户点关闭)
          btnArr = ['确定'];
      }
      layer.msg(txt, {
          time: closeTime
          , offset: '150px'
          , btn: btnArr
          ,btnAlign: 'c'	
      }, function () {
      });
}

//全选 全不选
function checkAll(name) {
	/*用法:在table标题有“全选”复选框,onclick事件调本函数
    */
    var checks = document.getElementsByName(name);
    for (var i = 0; i < checks.length; i++) {
        var check = checks.item(i);
        if (check.tagName == "INPUT" && i != 0) {//第一是全选故跳过
            check.checked = checks.item(0).checked;
        }
    }
}

//动画特效:按钮等待提醒(按钮显示“XX中...”,小点有动画效果)
function wait(ts, cId) {
    /*用法:下面例子代码写在按钮click事件里
            $('#btnSearch').val('查询中...');//初始id是btnSearch的查询按钮文字
            setInterval("wait('查询中','btnSearch')", 500);//每隔500毫秒调用一次方法
    */
    var n = document.getElementById(cId).value;
    var txt = '';
    if (n == ts + ".  ")
        txt = ts + ".. ";
    else if (n == ts + ".. ")
        txt = ts + "...";
    else if (n == ts + "...")
        txt = ts + ".  ";
    else
        txt = n+"中...";
    document.getElementById(cId).value = txt;
}
//获取URL中参数值
function getQueryString(name) {
    /*用法:getQueryString("参数名1");
    */
    var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i');
    var r = window.location.search.substr(1).match(reg);
    if (r != null) {
        return unescape(r[2]);
    }
    return null;
}
//取随机数,参数:n代表随机数长度
function RndNum(n) {
    var rnd = "";
    for (var i = 0; i < n; i++)
        rnd += Math.floor(Math.random() * 10);
    return rnd;
}


//文本框字数倒计时
function Count(par,spanId) {
    var max = 200;
    var str = max - par.value.length;
    document.getElementById(spanId).innerHTML = "限制在200字内,剩余" + str.toString();
}

//禁用控件 2018-10-19
function disableControl(btnArray, _title) {
	/*用法:btnArray,要禁用控件id数组,如['btn1','btn2'];
     *      _title,鼠标放上提示语
	 */
    var btnStr = "#" + btnArray.join(",#");//数组 转 “#btn1,#btn2”
    $(btnStr).attr('disabled', 'disabled').attr('title', _title).attr('style', 'color:#A9A9A9;cursor:not-allowed');
}


html+js视频学习


2.HTML基础-表单 文档流 2018-10-28 21:13
  • 本文件夹里面同学课前分享很棒,介绍了他自己初中毕业在东莞没有白天和黑夜工作的经历,以及最后为啥转学软件开发的心路历程。
  • 表单能正常提交给服务器必要条件:在form标签内;是表单控件;控件有name属性。
  • 仅表单标签有name属性,且页面里可以重复出现,id属性不能重复。name是提交服务器用到,id仅仅是客户端js用的。
  • from必须要有action(表单提交给服务器页面路径),method(get/post)。
  • action属性值是服务器URL地址,与a标签href使用体验一样,后面该跟参数要跟参数。<form id='form1' action='http://www.baidu.com/a.aspx?id=1&orgNo=123' method='post'>
  • get方式是把表单拼接到url后面(故人可见)传递到服务器(格式:name=张三&age=23)。其中控件的name属性作为key,value属性作为值。
  • post方式提交表单,数据被浏览器隐藏了,用工具可在报文里找到,数据格式与get方式的一样(name=张三&age=23)。另外,上传文件时method必须是post方式。
  • web文件上传下载原理浅析
  • 在上传文件时,form标签必须加上enctype="multipart/form-data"(enctype属性,编码类型。在发送前如何对表单进行MIME编码 )。multipart/form-data是指表单数据有多部分构成,既有文本数据,又有文件等二进制数据的意思。
  • C#代码通过Request获得InputStream对象,获得从客户端发送来的字节流。并将其保存在服务器D盘的同类型文件中。代码:HttpPostedFile f =Request.Files["控件name"];f.SaveAs(@"d:\1.xls");
  • 亲测发现:asp.net的aspx页面代码是<form id="form1" runat="server">最终会被生成html<form id="form1" action="test.aspx" method="post" enctype="multipart/form-data">
  • 考虑到get、post方式提交数据都不安全所以近几年(2015年左右)流行用https方式加密提交的数据。数据提交时会被转成二进制,就算被截获也无法破解。
  • css(层叠样式表)三种使用方式?CSS主要有元素内联、页面嵌入和外部引用三种使用方式。 优先级?行内样式>内页样式>外部样式。 在css代码后面加!important标明此种css优先级是最高的。可实现强行改变css优先级。从样式选择器看权重优先级:important > 内嵌样式 > ID > 类 > 标签 | 伪类 | 属性选择 > 伪对象 > 继承 > 通配符。
  • css选择器?.类名称{}#id{} ; div{};div p{}——针对为div内p的样式;p.类名称{}——是p元素且指定的类名设置样式。
    伪选择器(如“a:hover” )——目的是让标签在不同状态时有不同样式。此类选择器只是个别元素有,并且不同浏览器还不一样。不过a标签都一样。
  • 文档流position,设置元素位置。默认文档元素是从左到右,从上到下,依次布局显示在页面上的。用下面方法改为绝对位置后就必须为元素指定坐标。position:fixed,针对浏览器窗口一屏幕中可视区域内的绝对位置,设置后固定不变如“返回顶部”功能(ie6不支持);position:absolute是相对整个长网页中的绝对位置;position:relative,针对自己初始位置右上角绝对位置(也必须设置坐标)。position:staitc,是文档流的默认值。
  • float也是让元素脱离文档流式布局,但是多个元素浮出后,他们之间还是有先后顺序的。如:一个div内3个div,按左中右布局就用float实现。
<div style='height:100px;background-color:skyblue'></div>

<div style='height:300px;width:100%;background-color:yellow'>
	<div style='float:left;width:20%;height:100%;background-color:gray'></div>
	<div style='float:left;width:60%;height:100%;background-color:red'></div>
	<div style='float:left;width:20%;height:100%;background-color:blue'></div>
</div>

<div style='height:100px;background-color:skyblue'></div>
  • table的属性“cellpadding, cellspacing”
  • 单词padding衬底,衬料;space 留间距于...之间
  • 记忆:space指定两脚间距,padding指定脚穿的鞋有点大要衬点东西多少才合脚。“脚” = “td里的文本内容”。pad多少决定了往鞋里塞的东西多少,space大小决定两脚间距
  • 用背景色实现细边框版(实现起来不轻松)思路:border=0,单元格space=1,table背景色为黑色,tr背景色是白色,就能实现黑色细边框。
  • 细边框table代码,步骤(so easy再也不用为此痛苦了!):单元格边框样式 → 单元格间距为0 → table边框折叠collapse
<style>
table{border-collapse:collapse;}//边框合并
td,th{border:1px solid blue;}//单元格边框
</style>
<!--两个td间隔为0-->
<table  cellspacing='0' >
 <tr>
   <th>Month</th>
   <th>Savings</th>
 </tr>
 <tr>
   <td>January</td>
   <td>$100</td>
 </tr>
</table>
  • margin:0 auto,表示元素(单元格除外)距离浏览器窗口上下是0,水平方向自动,可实现div水平居中,如:<div style='border:1px solid red;width:200px;margin:0 auto'>1</div>
  • margin语法:margin:上 右 下 左,与table的cellspacing一个作用。
  • 盒子模型,每个html元素此模型都起作用,此模型说明了元素大小是由“margin、border、padding、内容自身”综合来决定的。
  • css文件中引入其css文件办法:两个css文件“a.css、b.css”,在b.css中加上@import url("a.css");可实现把a里面样式与b合并成一个。
  • html引用css文件:<link href="CSSurl路径" rel="stylesheet" type="text/css" />
  • 《css禅意花园》图书,介绍div+css的使用。

精品奉献.Net全套就业班视频教程-video js部分

04.[前台]Javascript基础加强\1.javascript基础-基本语法 变量作用域 匿名函数\1.JavaScript基本介绍.avi 2018-10-18 17:50:12
  • JavaScript(js)前身是LiveScript(Netscape公司开发)。
  • ECMA(欧洲计算机制造商协会)统一了js和JScript(微软产品)语法和特性,叫ECMAScript
  • js支持:核心语法(ECMAScript)、DOM(文档对象模型)、BOM(浏览器对象模型)。前两部分w3c有标准,BOM跟浏览器有关。
  • js是基于对象和事件的脚本语言,主要在客户端,由浏览器执行。js不能访问本地磁盘。
  • IE等弹一个alert后,后面的html内容浏览器停止渲染,点确定后才渲染后面html。html和js代码从上到下依次执行。
  • js语法:
  • 严格区分大小写(n和N是两个变量)
  • var(variable,变量),js是弱类型语言,支持动态类型如var n=10;n="a";是合法的,一行一种数据类型
  • js行尾加“;”不强制要求,但是建议必须加上好处大于坏处。
  • 变量命名规范:以“字母,下划线,$”开头,中间可以有“字母、数字、下划线或$”。
04.[前台]Javascript基础加强\4.双等号"= =“与三等号”= = =".avi 2018-10-19 17:22:56
  • javascript 只有六种数据类型number、string、boolean、null(只有一个值,是它本身)、undefined(只有一个值,是它本身)、object(对象、数组、function等)
//---巧用+和-规则转换类型----
var a=1+'';//int 转 string
var b='1'-0;//string 转 int
alert(typeof b+"--"+b);

//---变量是否可用----
var x;//未赋值时转bool是false
if(x)
{
	//变量可用
}else{
	//变量不可用
}
  • “= =”与“= = =”,分别表示“相等于,严格等于”。相等,值一样即是true,不考虑数据类型。严格等于,数据类型和值必须一致,才是true。取反分别是“!=,!==”。switch用的是“严格等于”。
04.[前台]Javascript基础加强\5.null与undefined.avi 2018-10-19 17:22:56
  • 出现undefined情况

1、声明了变量但是未赋值是undefined。
2、变量未定义直接用会抛异常,可以检验是否为undefined来避免异常if(typeof(a) =='undefined'){}
3、function没写return语句,但是你用这样函数给变量赋值就是undefined。

  • null用法:对象用完,想让浏览器垃圾回收,直接为变量赋值null就可以了。
  • null转为数字是0,undefined转数字是NaN。(null==undefined)——true;(null===undefined)——false
04.[前台]Javascript基础加强\6.JavaScript中的变量作用域.avi 2018-10-19 17:38:50
  • 在页面方法体外直接声明变量是“全局变量”或方法体内不写var的变量也是“全局变量”,全局范围是当前页面都能访问;默认是window对象的成员;浏览器关闭才释放资源;每个<script>标签(一个页面有多个此标签)内都能访问;不足是:容易命名冲突。
  • 函数体内变量,访问范围是函数内部。js无块级作用域(见下面代码)。
//会弹两次“11”
function f1()
{
	var x=10;
	if(x>5)
	{
		var y=11;
		alert(y);
	}
	alert(y);//js无块级作用域。故在方法内任意一个地方的变量,在这个方法都有效。
}
f1();
  • 转义符号:js的与C#一样都是“\”,但是js没有“@”,输出alert("E:\\飞秋\\1.txt"); \r\n——换行;\t——tab
  • 6种数据类型可以相互转化
  • parseInt(‘1’)返回1; parseInt(“aaa2aa3”)返回NaN; parseInt(“1aaa2aa3”)返回1; parseFloat(‘99.1’)返回99.1;最省事方法:Number(‘1’)返回数字(可int可float)
  • var a=1;a.toString()变量未赋值会抛异常,建议String(a)
    2018-10-19 18:17:32
04.[前台]Javascript基础加强\9.js中的逻辑运算符-JavaScript调试.avi 2018-10-22 17:07:49
  • NaN,即非数值(Not a Number),用isNaN()函数,判断值是不是NaN,不能用“a==NaN”方式判断。isNaN('1') or isNaN('a') //true代表非数字,false,代表是有效数字
  • eval(),把字符串做js代码执行,类似SQL的exec(sql语句字符串),有安全风险,不到万不得已,一般不用他。
  • 各种对象转bool什么情况下是false? null,undefined,0,'',false,NaN在做bool运算时,都表示false,其余都是true,或者 var b=new Boolean(变量)查看b结果。
  • 两个变量与逻辑表达式结合,会返回哪个值:
/*逻辑表达式:"&&"——第一个为false就不用判断第二个,
有false只返回false的值,都为true返回最后一个true的值。
“||”——一个为真就为真就返回,只会返回其中一个且是第一个真的值。
*/
var r='a' || '';//
alert(r);//a,非空的bool值是true,空字符串bool值是false,所以返回a
alert(null || 14);//14
alert('a' && 0);//0,0的bool值false
alert(null && 4);//null,null的bool值false
alert('55' || 5);//55,第一个为真,直接返回55
alert('66' && 6);//6,两个都是真,返回6
alert(null || 0);//0

  • 有过JacaScript编程经验,你会知道相当多的时间是花在调试上。这很正常 - 这只是编程者必须做的事之一。实际上,按照大量的研究,程序员平均百分之五十的时间花在解决代码中的错误。关键是学会怎样有效地调试你的程序,掌握调试技巧是必须的。IE8以后“F12”可以进行js代码调试。也可以把错误在控制台输出:console.log(“信息”)。
//计算运行所花费的时间,单位毫秒。
$(function(){ 
 console.time('耗时'); //启动计时器,参数表示计时器名,要time和timeEnd前后一致,可以不写参数
 f1();//js代码
 console.timeEnd('耗时');//停止并输出。耗时: 11.4609375ms
})
04.[前台]Javascript基础加强\11.函数定义.avi 2018-10-22 17:56:06
  • function getMessage(id){...},函数命名规则第一个单词首字母小写,后面单词首字母大写。参数无数据类型。
  • js函数永远有返回值,函数体内没return语句,返回的是undefined。
  • 预先解析哪些东西?答:预先解析函数和变量。了解这个概念,写代码时使我们理清思路,对JS执行的过程更加了解。
  • js没有函数重载概念。js中方法重名时最后一个覆盖前面的(预解析发挥了作用)。js要实现重载效果采用arguments,但是建议函数写上参数,提高代码可读性,具体代码搜本页“arguments”关键词。
  • argument 论据;争论,争吵,js函数可在0参数情况下,像C#的可变参数一样随意传参,然后通过在函数内遍历arguments集合取值。
  • 预解析发挥了作用,下面代码结果是“4,4”。原理:在同一个<script>内,js引擎会先把函数都挑出来“预解析”(同名后者覆盖前者),然后从上到下依次执行代码。所以,以后函数名千万注意不要重名。
var x=1,y=0,z=0;
function add(n){
	n=n+1;
	return n;
}
y=add(x);
function add(n){
	n=n+3;
	return n;
}
z=add(x);
alert(y+','+z);//结果:4,4
  • 方法外面变量与方法内变量重名,优先使用内部变量(预解析发挥了作用)。建议函数内变量一开始把值都给赋了。
var b=1;
function box() {
	alert(b);//undefined,内部作用域起作用,b值还未赋值
	var b=2;
	alert(b);//2,内部作用域起作用
}
box();
alert(b);//1,外部作用域的值
  • 在函数内声明的变量属于函数的。如果遇到局部变量与全局变量重名,则优先使用局部变量。变量与函数具有同样预解析功能(预解析只解析声明不赋值)。
04.[前台]Javascript基础加强\13.匿名函数.avi 2018-10-23 17:12:31
  • 匿名函数,三种用法:(匿名函数——只有非匿名才有预解析功能,匿名函数没有)
	/*函数是一个对象*/
	alert(myFunc.toString());//返回函数myFunc全部代码串
	alert(myFunc.length);//返回函数myFunc参数个数
	function myFunc(a)
	{
		alert('123');
	}
	//一、js匿名函数可以直接赋给变量(类似C#委托),变量好处可以不断赋新值覆盖旧对象。
	var f=function(){alert('222')};
	f();//222
	f=1;
	alert(f);//1
	f=function (x,y){return x+y};
	var r=f(1,2);
	alert(r);//3
	
	common(f);//传一个函数给方法
	function common(fn)
	{
		fn();//222
	}
	
	//二、直接定义并直接传参数(jQuery对js的封装,用的就是这个技术)——两对括号,
	//前面一个是匿名函数体,后一个往里传变量。
	(function (x,y){alert(x*y);})(20,2);//40,本写法好处:保证了变量在匿名函数内有效,不怕外面重名??
	
	//三、函数代码是动态拼接的(用的少),Function里变量外界没法访问
	var f3=new Function('x','y','z','alert(x+y+z);');
	f3(1,2,3);//6
  • js中函数也是对象。 所以函数对象有方法和属性。函数名.toString(),返回函数源码。函数名.length,返回函数参数个数。函数越多占用内存越多。
  • 匿名函数好处:不用写函数名。使用时定义方便。可把函数赋值给变量。而变量好处是可以不断赋新值覆盖旧对象。jQuery中大量使用匿名函数。
  • (function (x,y){alert(x*y);})(20,2);——定义匿名函数的同时调用它。等同于下面代码:
var f=function (x,y){alert(x*y);};
f(20,2);
  • 通过new Function()方式定义匿名函数。类似eval执行动态函数体。
var f3=new Function('x','y','z','alert(x+y+z);');//前三个是参数,最后一个是函数代码内容
var f3=new Function('x,y,z','alert(x+y+z);');//本方式参数也可
f3(1,2,3);//结果:6
04.[前台]Javascript基础加强\14.数组的声明和使用.avi 2018-10-23 18:04:40
  • 数组知识点见下面注释
var ar=[1,2];//ar=[];//清空数组
alert(ar.toString()); //数组转string
var ar2=[];//var arr=new Array();
ar2[0]=1;//ar2长度是0,无下标,但是可以如此不断加入值
ar2[5]='aa';//可以同时存任意类型数据,直接到下标是5的赋值,中间存的是undefined
alert(ar2[2]);//undefined
/*ar2[ar2.length]='a'--经典:此方式在for中不断为数组添加值*/
  • 补充
var data=[];//此时data.length是0
data[data.length]='a';//往数组中不断加值
data[data.length]='b';
data.length=1;//【裁剪数组】(长度变小后,丢掉的内容找不回)
var arr=new Array(12,2,'hi',function(){alert('hi')});//如果0个参数则Array初始化0长度的数组,如果多个参数则给数组赋值(js发明者思路真变态)
  • 对象key-value分别转成集合
let rowObj={"name":"tome","age":"123"};
let ValueArray = Object.values(rowObj);//rowObj对象value集合转数组
let KeyArray = Object.keys(rowObj);//rowObj对象key集合转数组
  • js的15种循环遍历
  • 变量使用越多越耗费内存。
  • <a href='http://www.baidu.com' target='iframe1'>百度</a>会在<iframe name='iframe1'/>中打开百度首页。target其他4个保留的目标名称,用于特殊重定向操作:_blank(新窗口中) 、_self、_parent、_top
  • <a href="javascript:void(0);" onclick='myFun();'>啊啊啊</a>href='#'效果一样,不过好处是点击a页面不会跳动到页面顶部。
  • void(表达式)关键字,只执行表达式,但不返回值,。
  • void(0),表示点击后不发生任何事。‘#’表示锚是#top也就是网页的上端(“#+控件id”,跳转到指定目的地)。而javascript:void(0);, 仅仅表示一个死链接。
04.[前台]Javascript基础加强\2.javascript基础-基本语法 js面向对象 闭包 数组\1.数组练习.avi 2018-10-25 17:06:33
  • 函数也是对象。成员length、proptotype、arguments、toString()、apply()、call()
  • 数组:
new Array();//数组没有长度
new  Array(10);//数组长度是10
new  Array(1,2,3);//数组初始化3个值
var arr=[];//数组字面量,推荐这样声明数组
  • 数组常用方法:join、concat(多个数组拼接到一起)、reverse、sort(数字也按字符串排序)、push、pop、shift(换掉,删除第一个元素。这也将改变数组的长度)、unshift、slice(类似substring)、splice(类似replace)
  • js 怎么移除数组指定索引值?用splice。具体见下
var fruits = [{a:'b'},{a3:'b3'}, {a4:'b4'}, {a5:'b5'}];
fruits.splice(2,1); 
console.log(fruits);//a4会被移除,返回剩下的

var arr=[2,1,10];
arr.sort(function(x,y){return x-y;});//类似C#的集合调sort方法传一个比较器
console.log(arr+"");//按数字asc排序

/*1、数组支持存放键值对*/
var dic=new Array();//当dictionary用时,必用本方式声明数组
dic['a']="A";
dic['b1']="B+";
dic['b']='B';
alert(dic['b1']);
alert(dic.length);//此时返回数组长度是0
//for-in,循环键值对
for(var key in dic)
{
	alert('键:'+key+',值:'+dic[key]);
}
dic[0]=1;//也能赋值成功
/*2、上面方式存放键值对集合简单写法:对象字面量(json)*/
var obj={'a':'A','b1':'B+'};
alert(obj.a);//A
for(var key in obj)
{
	alert('键:'+key+',值:'+obj[key]);
}
obj.c='C';//给obj添加一个键值对
var j={'a':'A','b1':'B+','more':{'c':'C','d':'D'}}];//这样写也对

var b=[2,3];
b.shift();//头部起移除一个
alert(b);//b变成了只有3的数组
b.unshift(1)//头部起增加一个
alert(b);//1,3
	
  • string对象 charAt(1),获得指定索引字符、indexOf、split、substr、substring、toUpperCase、toLowerCase、(后面支持正则表达式)match、replace、search
    更多见“jscript.chm”帮助文档string对象函数。JavaScript在线参考手册w3school
var a='1@2!3#';
a.indexOf('!',3);//返回从索引3往后出现的‘!’索引值
a.lastIndexOf();//从后往前找字符
a.substr(4,4);//从索引4开始截取4个,第二个参数不写并且从索引4开始到完
a.substring(4,5);//从索引4开始截取到索引5个,不含结束索引
a.split('@',5);//有5表示分隔后,只返回前5个,后个参数不写表示返回全部
//有用!!!
a.split(/@|!|#/);//按@或!或#分隔,正则表达式实现
04.[前台]Javascript基础加强\2.javascript基础-基本语法 js面向对象 闭包 数组\6.JavaScript面向对象1.avi 2018-10-25 18:08:16
//这是一个函数,也可叫“函数对象”
function Person(){
}
Person();//此写法是直接当函数用
/*下面是当成类使用,创建person类型实例p。
但是js中没有类概念,只有函数(构造函数)。
首字母大写表示未来会当构造函数使用。
所有对象都继承至object。
下面代码类似C#的实体类
*/
var p=new Person();
p.name='zs';//因为js是动态语言,所以先写啥属性就写啥属性。
p.age=1;
p.sayHi=function(){alert('hi');};
alert(p.age);//1
p.sayHi();
/*上面代码等效↓,但是不便于区分不同对象*/
var obj=new Object();
obj.name='zs';
obj.age=1;
alert(obj.age);//1
/*js版的C#的实体类*/
function People(name,age){
	this.Name=name;//this表示将来创建的对象(下面的p1)
	this.Age=age;//this后面的属性都是public
	this.SayHi=function(){
		alert('hi'+this.Name);
	}
}
var p1=new People("hh",1);
p1.SayHi();
alert(p1.Name);//点出属性值
alert(p1['Name']);//索引方式取属性值
for(var key in p1)//遍历对象key-value
{
	alert("对象键:"+key+",对象值:"+p1[key]);
}
alert(p1 instanceof People);//类似C#判断"p is Person"是否为某个类
/*通过“对象字面量”方式,超简单地创建对象,好处是快速地封装一堆数据和行为*/
var p2={
	name:'zs',
	age:12,
	sayHi:function(){
		alert('hi-'+this.name);
	}};
  • 对象:在 JS 中是使用花括号包裹 {} 起来的内容,数据结构为 {key1:value1, key2:value2, …} 的键值对结构。在面向对象的语言中,key 为对象的属性,value 为对应的值。键名可以使用整数和字符串来表示。值的类型可以是任意类型。
  • 数组:数组在 JS 中是方括号 [] 包裹起来的内容,数据结构为 [“java”, “javascript”, “vb”, …] 的索引结构。在 JS 中,数组也可以存放像对象那样使用键值对,但还是索引使用得多。
  • JSON与JS对象的关系? JSON 是 JS 对象的字符串表示法,它使用文本表示一个 JS 对象的信息,本质是一个字符串。key可以引号包裹的也可不用。
  • js中也有“委托”,通过传递一个方法名来传递方法。
function sub(x,y)
{
	return x+y; 
}

function test(f)
{
	if(f(1,1)>1)//调用传来的函数并传参
	{
		alert('hi');
	}
}
test(sub);//往test里传入sub函数

  • 循环可以做重复的事情。计算机高效的原因是因为有循环运算。
3.javascript Dom 获取元素id 动态注册事件 window对象\1.通过Id获取页面上的元素对象.avi 2018-10-27 12:05
  • 数组的concat函数类似sql的union all,把多个数组合并,但是也可以把多个变量并入数组中,a.concat(b,c,'aa');//a是数组变量,而变量b,c可数组可字符串
  • js调用DOM中的属性、方法操作网页。js——DOM类似C#——.Net Framwork,没 .Net Framwork,C#只能for/while,连MessageBox,WriteLine都不行。DOM也像WinForm一样,通过事件、属性、方法进行编程。DOM在不同浏览器中支持不一样(就是出现常见的浏览器兼容问题原因)。
  • DHTML = CSS + JavaScript + DOM
  • DOM模型:是一个tree,根元素html,上有枝条“head”(子枝条title等),有枝条boy(子枝条a、h1等,a有属性href)。
  • 我们直接写到js变量和函数都是注册给了“window”对象(顶级对象),可以直接"window.变量名或window.alert(‘hi’)",为了简化所以都省去了。
  • IE支持window.控件Id.value取控件值,但是控件移动到form1里,就要改为window.form1.控件Id.value才能正常。但是getElementById是所有浏览器都支持的。
  • js为控件赋值注意
 window.onload=function (){//页面加载完毕在赋值(本方式与<body οnlοad='fun()'>一样)
	document.getElementById('txt1').value='hi';//为某个控件赋值,必须也到onLoad事件里
}
  • js不推荐直接写在html按钮里‘οnclick=“fun();”’(js和html没分离)。建议用为元素动态注册事件方式实现分离。
<a href='#' id='btn1' onclick='alert("hi");'>aaa</a>
var code=document.getElementById('btn1').onclick.toString();
alert(code);//以字符串形式,返回btn1的onclick函数体
//-----为按钮注册事件----
document.getElementById('btn1').onclick=function(){
	alert('hi');
};
//-----为按钮注册事件----
function fun()
{
	alert('hi');
}
document.getElementById('btn1').onclick=fun;//把fun函数注册给按钮
//错误的写法(表示把方法返回值‘undefinded’注册给按钮)
document.getElementById('btn1').onclick=fun();

function fun2(a,b)
{
	alert(a+b);
}
document.getElementById('btn2').onclick=function(){
	fun2(1,2);
}
document.getElementById('a2').onclick=(function(x,y){//注册 匿名函数,有两个参数
	return function(){fun2(x,y)};//必须有return function(){}
})('ali',1);
--------------------- 
作者:zhexiaode 
来源:CSDN 
原文:https://blog.csdn.net/zhexiaode/article/details/88293015 
版权声明:本文为博主原创文章,转载请附上博文链接!
  • new Date().toLocaleTimeString()——返回“下午 12:00:01”日期格式
  • window.navigate('跳到目标网站,仅支持ie'),推荐用location.href='网站'
  • 计时器:定时重复执行函数
var id=setInterval(code,1000);//第一个参数匿名函数,第二个毫秒数
window.clearInterval(id);//通过id停止计时器
//-----文本框数字不断增1------
var id;
document.getElementById('btnStart').onclick=function(){
	id=setInterval(function(){
		document.getElementById('txt1').value++;//文本框中数字不断加1并在框内显示
	},1000);
};
document.getElementById('btnEnd').onclick=function(){//停止上面计时器
	clearInterval(id);
};

//实现按钮的动画(点不断增加)-------
function waitBtn(btnId,txt){
	/* 传控件id和控件文本*/
	setInterval(function(){
		var v=document.getElementById(btnId);
		if(v.value.indexOf("...")>=0)
			v.value=txt+'.';//文本框数字不断加1
		else
			v.value+='.';
	},500);
}

//-----实现自动加或减1------
	var t=1;//标志 
	function fun()
	{
		t=2;
	}
	function aa()
	{
		t=1;
	}
	setInterval(function(){ 
		if(t==1){ 
			document.getElementById('txt1').value++;
		}else{
			document.getElementById('txt1').value--;
	}},400);
	document.getElementById('加1').onclick=fun;
	document.getElementById('减1').onclick=aa;
</script>
  • setTimeout超时,超过多久执行一次。实战:一个页面嵌iframe页面,iframe上有个loading图片,在没加载完前一直显示,加载成功或超时就隐藏。
  • onunload(页面卸载事件),刷新/关闭网页后触发。onbeforeunload页面卸载前触发,页面准备关闭前触发。可以实现在博客误关闭页面时提醒。
  • window.location的属性
//查看window.location中成员
for(var key in window.location)
{
	alert(window.location[key]);//启发:可以遍历浏览器属性
}
  • window.event的属性(有兼容问题)
document.getElementById('btn1').onclick=function(evt){//火狐必须有参数,ie不用
	var e= window.event || evt;//兼容代码(有一个为true,返回true的对象给e)
	if(e.ctrlKey)
		alert('点击同时按ctrl键');
	var x=e.offsetX;//点击点,距元素右上角坐标
	var y=e.offsetY;
	var x=e.clientX;//点击点,距浏览器页面右上角坐标
	var y=e.clientY;
	var x=e.screenX;//点击点,距屏幕右上角坐标
	var y=e.screenY;
	alert(x+","+y);
	var x=window.screen.width;//浏览器窗口大小
	var y=window.screen.height;	
}
//---this取得控件上属性---
 document.getElementById('b').onclick=function(evt){//火狐必须有参数,ie不用
	var e= window.event || evt;//获得所有事件(srcElement获得事件源对象)
	alert(this.value+","+this.name+","+this.id+","+this.type);
	alert(e.srcElement.value+","+e.srcElement.name+","+e.srcElement.id+","+e.srcElement.type);
	/*this和window.event.srcElement在本处效果一样,但是冒泡时就区分出不同了!!
	click的冒泡:body里有div,div有span,span里有p,这四个都有click事件。
	当是this.id时,在点击p时,会先从p到body依次弹出相应控件id
	当是e.srcElement.id时,点击p时,会先从p到body依次弹出的都是p的id!
	e.cancelBubble=true;可以实现点p时,只是执行p的click事件,其他元素不执行。
	*/
 }
  • 控件如果是房间,浏览器窗口是所在的那栋楼,屏幕窗口是地图。
    offsetX/Y——鼠标相对房间中“原点”的坐标
    clientX/Y——鼠标相对楼中“原点”的坐标
    screenX/Y——鼠标相对地图中“原点”的坐标
    在这里插入图片描述
    jQuery版:$("#btn1").mousemove(function(e){ e.offsetX ......等等与js的一致});
  • window.clipboardData属性(剪贴板),仅支持IE,在ie上复制内容会放到操作系统粘贴板中,内容可贴到记事本中。
//网页上右键复制事件
document.body.oncopy=function(){
	setTimeout(function(){//200毫秒后在执行加版权代码
		var msg=clipboardData.getData('txt');//txt,类似id
		msg +=" <p>文本来自:www.baidu.com</p>";
		clipboardData.setData('txt',msg);
	},200);
}
window.history.back();后退 / window.history.forward();前进
window.history.go(-1);后退 / window.history.go(1);前进
  • document属性
window.onload=function (){
document.write('往页面写东西');//写在window.onload内,旧内容会被彻底覆盖
}
//下面方式不会覆盖网页原内容
document.writeln('显示时,文本后面有空格');
document.write('<a href="http://www.baidu.com">百度<\/a>');
  • 什么时候用document.write
  • 网站有动态新闻模块或广告或网站的头和尾。如百度每天动态生成js文件,代码如下:
  • baiduNews.js
document.write('<a href="http://www.12.com">新闻1<\/a> <a href="http://www.12.com">新闻2<\/a>');
  • 你的站点:
<table>
	<td>11</td>
	<td><script src='baiduNews.js' type='text/javascript'></script></td><!--引入百度新闻-->
</table>
  • window对象的属性:getElementById(),getElementsByName(),getElementsByTagName(‘textarea’),后两种返回符合条件的集合。循环请用for循环,不要用for-in循环。
//判断一个控件是否存在
var ts=document.getElementById('btn1')? '存在按钮':'不存在按钮';

//返回集合
var a=document.getElementByName("sex");//页面上,所有属性name是sex的元素
var b=document.getElementByTagName("p")//页面上,所有p元素
var c=document.getElementById('div1').getElementByTagName("p")//div1内的所有p元素
  • html、js、css关系:一个很经典的例子是说HTML就像一个人的骨骼、器官,而CSS就是人的皮肤,有了这两样也就构成了一个植物人了,加上javascript,这个植物人就可以对外界刺激做出反应,可以思考、运动、可以给自己整容化妆(改变CSS)等等,成为一个活生生的人。
  • jQuery选择器和CSS选择器的写法十分类似,都具有隐式迭代的特点,无需循环遍历符合选择器要求的每个元素,使用起来相对方便,通常,把css选择器用$("")包起来就成了一个jQuery选择器。
  • 两者的区别在哪里呢?CSS选择器找到元素后为设置该元素的样式,jQuery选择器找到元素后添加行为。jQuery选择器拥有更好的跨浏览器的兼容性。
  • 下面代码演示:js为控件注册onclick事件,而调用的函数参数0~n个!!
<script>   
function myFun0000(n,a)
{
	alert('name:'+n+" ,age:"+a);
}
function myFun1()
{
	alert('hi,我是0个参函数');
}
window.onload=function(){
	
	//按钮注册事件,但是方法有多个参数
	document.getElementById('a2').onclick=(function(x,y){
		return function(){myFun0000(x,y)};//为按钮注册两个参数的方法,看这里!!!
	})('ali',1);
	
	//按钮注册事件 但是方法有0个参数
	document.getElementById('a2').onclick=myFun1;
	
	//jQuery为a4添加事件
	$("#a4").attr("onclick", "return myFun0000('Lily',20)");
	
	//直接为控件赋匿名函数
	document.getElementById('a2').onclick=function(){
		alert('hi,我是匿名函数');
	};
};
</script>
<a href='javascript:void(0);' id='a1' onclick="myFun0('Tome',12)">aa</a>
<a href='javascript:void(0);' id='a2' >bb</a>
2.javascript基础-基本语法 js面向对象 闭包 数组\8.原型对象prototype1.avi 2018-10-29 17:29:11
  • 下面代码介绍了对象prototype,以及js的继承
function Person(name, age)
{
  this.Name=name;//this.Name是Person私有
  this.Age=age;
  this.SayHi=function(){//方法
	    alert();
  }
}

/*上面方式如果new了100个实例,则SayHi方法在这100个实例里都有一个。
* 怎么实现sayHi只存在一份呢?用函数对象的prototype(原型对象)属性。
* prototype里面方法属于函数对象的,非某个实例,它是大家共有的。
*/
function Person(name, age) {
	this.Name = name;
	this.Age = age;
}
//如此可不断往Person.prototype加方法
Person.prototype.sayHi = function () {
	alert(this.Name + ' , ' + this.Age);
}
//也可以往里写属性,但是只读的,不能改
Person.prototype.Star = '地球';
Person.prototype.Friends = ['zhang','Li'];
var p1 = new Person("Tome", 12);
p1.Star = "火星";//相当于在p1里加了Star属性,故可显示出火星而proto里值没变
p1.Friends[0] = "赵";//把'zhang'替为"赵",因为本代码表示改引用类型值(堆)
p1.Friends = ['ali', 'xiaomi'];//而这代码因只读故会在p1加Friends属性
p1.sayHi();//p1的通过"__proto__"(外键)关联对象里找写的方法,可如此一层一层往上找,直到找到指定的方法——js的继承
var p2 = new Person("Lily", 22);
p2.sayHi();

/*为js的字符串统一,扩展一个方法*/
String.prototype.addWujiaoxing = function () {//在字符串尾部添加☆
	return this + "☆";
}
var a = "123";
alert(a.addWujiaoxing());//123☆

/*js中的继承:js中没类概念,继承是通过对象和对象之间来实现。*/
function Student(sid) {
	this.stuId = sid;
}
var p3 = new Person("Lily", 22);
Student.prototype = p3;//Student继承Person
var s1 = new Student('001');
alert(s1.Name + "," + s1.stuId);
//可以覆盖原来name/age属性和函数值
s1.Name = "成龙";
s1.Age = 33;
s1.stuId = '002';
s1.sayHi = function () {
	alert(s1.Name + ' , ' + s1.Age + "," + s1.stuId);
}
s1.sayHi();
/*继承原理:s1找Name时,先自己里没找到再往“__proto__”关联对象里找*/
2.javascript基础-基本语法 js面向对象 闭包 数组\11.闭包.avi 2018-10-29 18:09:001
  • 闭包:简单说就是改善一个变量的作用域范围,让一个方法访问“父类”中方法和属性。就是一系列作用域组合在一起,作用域链。
  • js的继承,面向对象等都是靠闭包实现的。
  • EasyUI管理后台模板(附源码)
var z = 10;
function myfunction() {
	var y = 1;
	alert(y);
	alert(z);
	return function () {
		var y = 99;
		alert(y);
		alert(z);
	}//用了闭包:函数内访问外函数变量
}
//当下面方式,则提醒:1,10,剩下两个不弹
myfunction();
//当下面方式,则提醒:1,10,99,10
var ff = myfunction();//本处会弹“1,10”
ff();//本处会弹“99,10”
  • js文件中引入js文件:document.write(”<script language=javascript src=’/js/import.js’><\/script>”);

假设条件是:JS(A)要调用JS(B)的函数.那么要满足以下条件:
1.要保证你所调用的JS必须在同一个页面里. 也就是JS(A)和JS(B)都要在页面X里.
2.要保证你所调用的JS先于调用者本身被解释.也就是JS(B)要先于JS(A)被解释.反映在页面上,就是JS(B)要写到JS(A)的前面.
3.要保证所调用的JS必须是同一个字符集下.这里有两层意思,一个是引用的JS文件的编码字符集要一样,还一个是嵌入HTML的JS标签属性charset也要一样.

  • 普通按钮实现提交表单方法:
//点submit按钮会触发onsubmit事件,而调用submit函数不触发onsubmit事件
document.getElementById('form1').submit();//提交表单
//为表单注册事件
document.getElementById('form1').onsubmit=function(){
	//js代码(可以写校验代码)
};

document.getElementById('普通按钮').onclick=function(){
	document.getElementById('btnSubmit').click();//btnSubmit是submit类型的按钮
	document.getElementById('form1').submit();//直接掉表单的submit方法
}

//获得div1内的input控件
var ar = document.getElementById('div1').getElementByTagName("input");

/*表单多个文本框,实现用户回车跳到下一个 */
var txt = document.getElementByTagName('input');
for (var i = 0; i < txt.length; i++) {
	txt[i].onkeydown = function (evt) {
		var e = window.event || evt;
		if (e.keyCode == 13)//用户按回车时替换成tab键
			e.keyCode = 9;//仅支持ie
	}
}
  • <body></body>标签的高度不是全窗口,高度与其内容高度一致,所以mousemove事件建议给document.onmousemove=function(){};

  • 正则表达式在任何语言里都通用的,js和C#正则表达式串都是一样的。

  • js压缩,压缩底线是压缩后机器能读懂能正常执行就行,好处是用户下载流量消耗少。办法是去掉“空格、注释”,较长变量名改短、函数名不变、重复内容IIS服务器给客户响应时用gzip压缩,浏览器接收后自动解压。

3.apply和call的调用.avi 2018-10-30 17:57:46
  • apply和call二者一个意思(区别:apply传参是放到一个数组中,call参数不断往后加,用逗号分隔)。
var name = "Z";
var user_name = 'L';
function showName() {
	alert(this.user_name);
}
showName();//L
function Person() {
	this.user_name = 'B';
}
var p = new Person();
p.show = showName;
p.show();//B

var p2 = { user_name:'ali' };
showName(p2);//L
showName.apply(p2);//ali,user_name作为p2的对象来用
showName.apply(window);//L,user_name作为window的对象来用

function showName2(x,y,z) {
	alert(this.user_name+","+x+y+z);
}
showName2.apply(p2,[1,2,3]);//“ali,123”,传参(类似C#的可变数组)

  • 不同浏览器的不同点:
  • 1、对DOM支持的方法不一样。如:获得网页中哪个元素触发了事件:IE使用srcElement,Firefox使用target。获得或更改标签内文本:IE用innerText,Firefox使用textContent。动态为元素绑定事件:IE用attachEvent,Firefox使用addEventListener(类似多播委托)。
  • 2、对CSS的支持不一样,经常IE显示正常,Firefox就乱掉了,就是css原因。
  • jQuery等框架将不同浏览器DOM操作的差异处理掉了,CSS兼容则是美工的事。测试不同版本IE用“IETest”。
  • 在每个页面的head内引用head.js——通过document.writeln在页面输出,具体需要的js、jQuery和css文件。这样写好处:用到了封装的思想,这样的代码浏览器会把head.js里面内容输出到相应页面的head内,变相引用了这些js、css文件。后期如果要为所有页面加一个js文件直接在head.js里加就ok了。其他博客:动态加载js css 插件
document.writeln('<script src="/style/jquery.min.js" type="text/javascript"><\/script>');
document.writeln('<script type="text/javascript" src="/style/jsl.parser.js"><\/script>');
document.writeln('<link rel="stylesheet" href="/style/screen.css" type="text/css"  media="screen, projection" />');
5.encodeURI和encodeComponentURI方法.avi 2018-10-31 17:14:56
  • http协议不支持中文,对中文编码。经常发现url中出现类似乱码就是浏览器对文本编码造成的。
 var a='http://www.a啊b吧≡◎.com';
 alert(encodeURI(a));//有些选择地编码,只是编码中文之类字符,解密“decodeURI”
 alert(encodeURIComponent(a));//所有非字母数字都编码,含“:、//”。
  • 在JS中推荐用encodeURI对URI的网址部分编码(decodeURI解码),用encodeURIComponent对URI中传递的参数进行编码,escape,不推荐使用。C#的encodeURI是Uri.EscapeUriString,encodeURIComponent是Uri.EscapeDataString。C#其他的HttpUtility.UrlEncode 、Server.UrlEncode,不推荐用,推荐使用前两个。js的这3个编码函数,C#解码用`Server.UrlDecode(str)或HttpUtility.UrlDecode(str)(二者都可)。
  • 匿名函数+递归编码技巧:
//递归   
var i=0;
var f1=function (){
	i++;
	alert(i);
	if(i<5)
	{
	//如果使用者是其他变量,就会有异常,可以用arguments.callee();//表示函数自身
		f1();
	}
}
f1();
6.javascript Dom urlencode 递归\6.练习需求.avi 2018-10-31 17:43:03
  • 将写在html中的js封装到外部js文件,注意:
  • js没命名空间,直接放到js文件会发生命名冲突。可借用把js代码封装到对象中来规避。例子:
var num=1000;//引用的js里也有num变量
//----js文件↓---
var myJsNameSpace={
	net:{
		num:1,
		sayHi:function(){
			alert(this.num);
		}
	}
};
//----js文件↑---

alert(num);//页面自己的变量
myJsNameSpace.net.sayHi();//调js文件中方法
alert(myJsNameSpace.net.num);//调js文件中变量
【前端扩展】
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值