主要学习资源:“精品奉献.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 或 '' 或 NaN 或 0;//下面语句会输出1
if(!rowObj){
console.log(1);
}else{
console.log(2);
}
- JSON 是如何诞生与发展的?
- 用户通过网址浏览网页到显示结束的过程:
- 用户通过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);
, 仅仅表示一个死链接。
(1.22).toFixed(1)
把 Number 四舍五入为指定小数位数的数字。javascript常用函数大全
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文件函数中调用另一个Js文件函数的方法
- js文件中调用另一个js文件的函数:
假设条件是: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文件中变量