Java Script

Posted xuexihainan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java Script相关的知识,希望对你有一定的参考价值。

‘‘‘
Script 核心
语法
引入放在head里
如果要在一个html里写 建议把<script src="JS.js"></script> 放在body的最下面

var定义变量
var a = 1; 加上分号
测试 alert(a) 相当于print
console.log(a)
document.write(s); 是在页面显示

建议用 iMyTextValue = 0; sMyTextValue = ‘h1‘
i是int s是str
{
包裹自己代码并加上缩进
}

注释
// 注释单行 建议
/* */ 多行注释

常量和标识符
关键字 不能当变量
break {delete for new实例对象 throw抛出异常 vold}
case {do function null true while}
catch {else if return try with}
continue {false in switch typeof }
default {finally instanceof this var}

function = def
函数调用:
function sayhello(){ 函数
var hellostr = ‘您好‘是常量
document.write(s); 是在页面显示
}
sayhello(); 调用

类型

基本数据类型(五种)
数字类型(number)
Number 包括整型和浮点型 开发用16进制是最好的 转换不成功就是NaN
String 字符串 统一是Unicode /n换行符
Boolean 布尔值 TRUE FALSE
null var obj = null 占个对象位置 以后需要用的时候 在赋值 且必须是对象
Undefined:Undefined 声明了某个变量,但未对他赋值 就是Undefined类型
数据类型的转换
数字和字符串拼接 会吧数字类型转换为字符串
布尔值和数字拼接 1+true=2 1+false=1 true=1 false=0
字符串和布尔值 显示hellotrue
函数parseint 强制转换成整数 (‘3.14a‘)=3 (‘a3.14‘)=NaN 当字符串转换成数字失败时就是NaN数据,属于Number类型
NaN==0 NaN>0 NaN<0 NaN==NaN 全部是false NaN数据出现在表达式中一定结果为false 除了!= NaN就是true
函数parseflcat 强制转换成浮点数
函数eval 将字符串强制转换成表达式并返回结果 eval(‘1‘+ 1)=2 eval(‘1<2‘)=true
typeof typeof(i) 查询数据类型





语句
if else:
if(表达式){
}else if(表达式){
}else{
}

switch:
switch(表达式){

case 1:y=‘星期一‘;break; 例子
case 值:语句2;break;
case 值:语句3;break;
default:y=‘自定义‘;break; 前面没有对应上 就直接default
}

for循环:
这个是迭代器 遍历
a = [1,‘hello‘,true]
for (var i in a){
console.log(i) 这里的i是索引
console.log(a[i]) 这里是拿值
}

js for循环的格式
for(初始化;条件;增量){
语句;
.....
}
for (var i=1;i<10;++i也可以是i=i+1){
console.log(i)
}
obj = {"1":"111","2":[1,2]}:
这是个数据对象object
打印是[object Object]前后端交互数据 拿到的数据就是这个
for(var i in obj){
console.log(i)拿到的是键
console.log(obj[i]) 拿到是值
}
json 里必须要用双引号""

for (var i=1;i<7;++i) {
document.write(‘<H‘ + i + ‘>hello</H ‘+i+‘>‘);
}以上就是拼接的方法 写出了h1-h6标签

while 循环:
while(条件){

}

异常处理:
try{
这段代码从上往下运行,其中任何一个语句抛出异常改代码块就结束运行
}
catch(e){
如果try代码块抛出了异常,catch代码块中的代码就会被执行
e是一个局部变量,用来指向Error对象或者其他跑出的对象
}
finally{
无论try中带吗是否异常抛出(甚至try代码块中有return语句),finally代码块始终会被执行。
}
主动抛出异常 throw Error(’xxxx‘)

关键字
保留字
运算符
自加自减
var a = 1
var b = a++ 先赋值在运算 a=2 b=1 a++先把值赋给b 在运算的a
b = ++a 先运算在赋值 a=2 b=2 ++a先运算a+1 在把a+1的值赋给b
x++ =1 先赋值
++x =3 先运算 这时x=2在+1
--x =2
x-- =2

一元加减法
var a = ‘3‘
b = +a + -号可以把字符串转成number
错误的:
var a = ‘a3a‘
b = +a 等于NaN

*逻辑运算符
&& 与 1 && 0 --> false 0 && 0 ----->false 1 && 1 ----> true python and
|| 或 1 || 0 --> true 0 || 0 ---> false python or
! 非 python not

左边是对象,右边是布尔值 返回对象
左边是对象,右边是对象 返回 右边的对象
某个数是null 返回null 空对象
某个数是NaN 返回NaN
某个数是undefined 返回undefined

位运算
3<<2
00000011 --> 11往前移2位

赋值运算符
=== 全等于 不做任何转换 等于就等于 不等于就不等于
*等性运算符
*null == undefined true
NaN == NaN false

关系运算符
比较运算符两侧如果一个是数字类型 一个是其他类型 会将其类型转换成数字类型
比较运算符两侧如果都是字符串类型 比较的是最高位asc码 如果高位相等 继续取第二位比较

布尔运算符
有值位true 空为false 后面类型都是false 空[] 0 null undefined






对象(封装 继承 多态)
ECMAScript
规范对象 定义的一些对象
native object
自己对应的对象
host object
非我自己定义的对象
****function
var去掉 b=3 就是个全局变量
尽量使用var b=3 局部变量
面试题:
function a(a,b){ a+b}
var a = 1
var b = 2
a(a,b)
会报错 应为对象a 在下面有个赋值a 上面的对象被覆盖
之所以报错 就是因为对象a是变量 赋值a也是变量
函数的起名也是个变量 指向函数运行的内存地址
赋值a 也是个变量 并指向了 = 1 所以会报错 因为没有a()方法

****arguments对象:累加 相当于py里的**args 判断语句
var ret=0
function add(){
console.log(arguments.length) 元素个数
console.log(arguments) 元素索引 Arguments[0:1,1:2,2:3,3:4]
for(var i in arguments){
ret += arguments[i] 累加
}
return ret
}
add(1,2,3,4,5)

匿名函数,自执行函数 (语法糖)
func3 = function()[alert(123)] 匿名函数
(function(arg){console.log(arg)})(‘123‘) 自执行函数 这个有用

alert(s2 instanceof string) 查看是什么对象

****string对象:
创建方式一:
var s=‘hello‘;
方式二:
var s2 = new string(‘hello‘);

String对象的属性 length
alert(s.length);
遍历字符串:
for(var i in s) {console.log(s[i])}
格式编排方法: 一般不用
document.write(s.italics()); 意大利字体
document.write(s.bold()); 加粗
document.write(s.anchor("alex")); A标签 锚 name=alex
大小写转换:
console.log(s.toUppercase);
console.log(s.toLowercase);
获取指定字符:
console.log(s.charAt(3)); 3是索引 取字符
console.log(s.charcodeAt(3)); 找到索引字符asc编码
****查询字符串:
console.log(s.search(‘l‘)); 索引位置 2
console.log(s.match(‘l‘)); 返回数组 里面是所有匹配结果
console.log(s.match(‘l‘)[0]); 返回数组 里面是所有匹配结果
console.log(s.replace("E","e"));hEool--> heool
console.log(s.split("E")); [h,llo]
console.log(s.concat(" world")); 字符串拼接 hEllo world
join 是把一个列表拼接成一个字符串。 [a,b,c] join abc
console.log(s.indexOf("l")) 从左往后找 通过字符串取索引
console.log(s.lastOf("L")) 从右往左找 通过字符串取索引

*****截取字符串:
console.log(s.substr(1,2)); 从1开始 取了2个 按个数取
console.log(s.substring(1,3));从1开始 取到第3个位置 按索引取
console.log(s.slice(1,3); 跟上面一样 但是这个方法可以 倒着取 左取右不取

****数组对象:
创建方式:
var arr=[1,2,3,4,5,6];
var arr2=new Array(1,2,3,4,5,6)
console.log(arr.length)
console.log(arr2.length)
内容里放任何类型都可以 字符串 布尔值 列表 数字

var arr2=new Array(3)
这里的3是占3个位置 内容3个undefined 未定义 是一个空列表
如果 采用初始化对象方式创建数据,如果里面只有个值而且是一个数字 那么数字表示的是长度而不是内容。

arr2[5]=10
数组是可变长的 刚开始定义的是长度3个index 现在又定义也是可以的 3-5之间undefined 5是有值的

二维嵌套数组:
var arr2=new Array(1,[1,2])
arr2[3][1] 拿取嵌套索引值

****数组对象的方法:
*****join方法:
var ret=[‘hello‘,‘mxiaohu‘].join(‘+++++++‘)
数组对象的方法 join方法:将数组内的字符串拼接成一个字符串
py是在字符串对象里用的 js是在数组(Array)对象里用的

****(push pop) (shift unshift) 方法:
队列:是先进先出 栈:是先进后出
var arr5 = [1,4,6]
arr5.push(13); 这个是压栈 把13 append 到arr5里[1,4,6,13] length:4
arr5.push(‘hello‘,7); 这个是压栈 把13 append 到arr5里[1,4,6,13,‘hello‘,7] length:6
ret = arr5.pop();
push 先进后出 加入的数据时在列表的右边 跟append类似 [1, 4, 6,13]
pop 取出并删除最后一个进来的

arr5.unshift(13);
ret = arr5.shift();
shift 先进后出 加入的数据时在列表的左边 [13, 1, 4, 6]
unshift 取出并删除最后一个进来的

空列表 不会报错

****排序 sort reverse:
var arr6 = [1,6,3,2]
arr6.reverse(); 反转  [2, 3, 6, 1]
arr6.sort(); 排序 不是数字的大小 [1, 2, 3, 6] [1,100, 2, 3, 6]
因为是把列表里的每个元素 当成字符串来排序 所以就是100的第一位是1 并1比2靠前
大小排序的方法:
function mysort(a,b){
return a-b
}

数组不限类型 不限长度

date对象:
****var Date_obj = new Date();
date_obj.toLocaleString(); 年月日 时间

var Date_obj = new Date(‘2016/3/16 12:20‘);
date_obj.toLocaleString(); (2016/3/16 下午12:20:00)

var Date_obj = new Date(‘5000‘); 5000毫秒
date_obj.toLocaleString(); (1970/1/1 上午8:00:05) 根据1970年 往后加5000毫秒

***function gettime(){
var Date_obj = new Date();
var year = date_obj.getFullYear(); 2016
var month = date_obj.getMonth() + 1; 10
var day = date_obj.getDate(); 8
var week = date_obj.getDay(); 星期2
var hour = date_obj.getHours(); 15点
var minute = date_obj.getMinutes(); 0
var ceconds = date_obj.getSeconds(); 29
date_obj.getHourMinuteSecond();
date_obj.getMilliSeconds;
date_obj.get();
return year + ‘年‘ + month + ‘月‘ + f(day) + ‘日‘ + ‘‘ + hour + ‘:‘ + ‘minute‘ + num_week(week)
}

function num_week(n){
week = [‘星期日‘,‘星期一‘,‘星期二‘,‘星期三‘,‘星期四‘,‘星期五‘,‘星期六‘]
return [n]
}
function f(num){
if (num < 10){
return ‘0‘ + num
}
else{
return num
}
}
结果: 2020年5月04日21:49星期一

****toLocalString

set是设定时间

getTimezoneOffset(); 8个时区*15度*4分/每度 = 480分钟=8个小时
返回本地时间与GMI的时间差,以分钟为单位

***re正则对象: 前端先验证 在后端在验证 例 像字母开头 位数 大小写都可以前端验证
创建方式1:
re_obj = new RegExp(‘d+‘,‘g‘) g是全局通用 i是不分大小写 一般都分大小写
re_obj.text(‘adfafa3245fadfadf‘) 返回是 true或false
创建方式2:
var re_obj = /d+/g;
re_obj.text(‘adfafa3245fadfadf‘) 返回是 true或false

alert(re_obj.match(/o/g)); 查找字符串中 符合正则的内容 返回的是列表
以中间没有匹配到的结果为逗号(,) 决定元素个数
alert(re_obj.search(/h/g)); 查找字符串中 符合正则的内容 取出第一个结果的索引值
alert(re_obj.split(/o/g)); 按照正则表达式对字符串进行分割,返回数值
alert(re_obj.replace(/o/g,"s")); hells wsrld 对字体按照正则进行替换

math对象:直接用 不用实例化类了 内置对象
Math.random() 返回的是0-1的随机数 例0.1264963246468321
Math.round(2.3) 返回的是2 四舍五入
Math.pow(2,3) 幂运算 几次方
max 最大值 min 最小值

var num = 100 * Math.random()
var num = Math.round(num) 这是取1-100的随机数




*Dom
控制HTML文档树
****document对象
node 节点对象
自身属性 一般用不到
attributes 节点(元素)的属性节点
node Type 节点类型
node Value 节点值
nodeName 节点名称
innerHTML 节点元素的文本值

****导航属性 查找标签和文档树
****parentNode 节点元素得父节点 (推荐)

****firstChild 节点下第一个子元素

****lastChild 节点下最后一个子元素

****childNodes 节点(元素)的子节点

查找 这样就可以不为null了,你上面的代码中,网页还没有加载完,就去寻找网页中的元素,是找不到的,
var ele = document.getElementById("div1"); //找到 id为div 的对象
console.log(ele.nodeName);
console.log(ele.nodeType);
console.log(ele.nodeValue);
console.log(ele.nodeType);
console.log(ele.nodeValue);
console.log(ele.nodeName);
以上了解就好
alert(ele);
找到子元素
ele2 = ele.firstChild;
alert(ele2.nodeName);//#text 第一部分是换行符 缩进 都叫文本内容 跟写一个hello是一样的
紧贴着的话 就是div

ele2 = ele.lastChild;
alert(ele2);

ele2 = ele.childNodes; 这个不用
alert(ele2.length); //[5]
ele2 = ele.parentNode; //就用这个****
alert(ele2.nodeName); //找到父亲 body

文档树:
document(html)包括两部分 -> element(head)和element(body)
element(head)-> element(title)-> text(title)
element(body) -> element(div)大 -> element(div)小 -> text(hello div)
这颗树 父子关系 从上之下

推荐的方式
var ele = document.getElementById("div1"); //找到 id为div 的对象
var ele_son = ele.firstElementChild;//找到 第一个孩子
var ele_last_son = ele.lastElementChild;//找到最后一个孩子
var ele_quanbu = ele.children; //拿到全部孩子 是一个数组
for (var i=0;i<ele_quanbu;i++){
console.log(ele_quanbu[i]) //遍历全部孩子的值
}
var ele_xiongdi = ele.firstElementChild; //找到兄弟标签
var ele = document.getElementById("div1").firstElementChild;//还可以这么写
ele_xiongdi = ele_xiongdi.nextElementSibling;//这里

****寻找对象的方式:
全局查找:
var ele1 = document.getElementById("div1"); //ID是唯一的
var ele = ele.document.getElementsByClassName("div2")[0];//找到class标签 class是多个 0是取的数组0索引
alert(ele.innerHTML);
var tag = document.getElementsByTagName("p");//通过标签查找
alert(tag[0].innerHTML);
var name_biaoqian = document.getElementsByName("alex");// 找到name属性的标签 这个用的不多
alert(name_biaoqian.innerHTML);
前三种用的最多
局部查找:
var ele = document.getElementsByClassName("div3")[0]; //先找到标签
//在找上面标签里面的标签 var ele2 = ele.getElementsByTagName("p")[0];
//alert(ele2.length); //标签里内容长度
// 在找上面的class var ele3 = ele.getElementsByClassName("ppp");
//这个是错的 id是全局唯一 所以不需要局部查找 var ele3 = ele.getElementById("ppp");
//这个是错的 不能通过name查找 ele4 = ele.getElementsByTagName("alex");
全局查找和局部查找 其实差不多 局部就是先找全局 在全局里找到 所需要的标签里面在查找 就是局部

这些属性是为了对文档树进行导航

event:(事件)
event:监听鼠标键盘的信息
on就是监听的意思
onclick 当用户点击某个对象时 调用的事件
ondblclick 当用户双击某个对象时 调用的事件

onfocus onblur操作输入框的方法 点击输入框出现的一直闪的光标 就是焦点
onfocus onblur
<input onfocus="func" value="请输入用户名" class="key"> 焦点
<input onblur="func1"> 取消焦点
function func() {
ky = document.getElementsByClassName(‘key‘);
ky.value("");
}
function func1() {
if (key.value.trim().length == 0){ //.trim() 清除空格 跟 strip 差不多
ky = document.getElementsByClassName(‘key‘);
ky.value("请输入用户名")
}

}

onchange 当用户改变当前表单时 触发
<select onchange="func3">
<option>上海</option>
<option>北京</option>
<option>河北</option>
</select>
function func3() {
alert(1234)
}

****onkeydown 按键盘上的某个键 这个事件就会被触发 主要用这个
<input type="button" value="press" onkeydown="func4(e)">
function func5() {
alert(123)
}

onkeypress 按住不放 触发事件
<input type="button" value="press1" onkeypress="func5(e)">
function func5() {
alert(123)
}

onkeyup 某个键被松开 触发事件 跟onkeydown 连起来用 按住一个事件 松开一个事件
<input type="button" value="press1" onkeyup="func5(e)">
function func5() {
alert(123)
}

onload 文档树没有加载完 就执行JS代码 会导致找不到标签 所以要用onload 把这个函数 放在body里
<body onload="func6()">
function func6() {
var p = document.getElementById(‘id1‘);
}

还可以这样用 加载完文档树 在执行js就不会出现找到对象 用这种
window.onload = function () {
var p = document.getElementById(‘id1‘);
};

****绑定事件的两种方式 通过标签对象绑定事件 还有一种是在标签后面绑定 在js里操作函数
这是第二种:
var obj = document.getElementById();
obj.onclick = function () {
alert(123)
};

onselect 相当于excel选项里的添加工具(自定义功能区)界面类似

mouse
下列onmouse方法 可以写在一个标签里
鼠标点下区域 触发
<div class="div1" onmousedown="func7()"></div>
鼠标移动到区域 在区域内移动就会触发 并一直执行 并显示px 触发
<div class="div1" onmousemove="func7()"></div>
鼠标松开:
mouseup
鼠标出来区域 触发
<div class="div1" onmouseout="func7()"></div>
鼠标进入区域 触发
<div class="div1" onmouseover="func7()"></div>

onsubmit 只在from标签应用
<from onsubmit="From()">
<input type="text" name="username">
<input type="submit" value="submit">
</from>
var From = document.getElementById(‘abc‘);
From.onsubmit = function (event){
alert("验证失败!");
return false 推荐用这种

event.preventDefault();
};

事件传播:
组织向外传播 嵌套div用onclick 点击大盒子会触发大盒子和小盒子 如果不想触发小盒子 就在小盒子里添加下面代码
event.stopPropagation();

node增删改查:
增删改查
一定是个父级对象去增删

<div id="div1">
<div>hello div</div>
<p>hello p</p>
</div>
<input type="button" value="添加P" onclick="add()">
<input type="button" value="删除P" onclick="remove()">
function add() {
var ele = document.getElementById("div1");
var son = document.createElement("p");
son.innerHTML = ‘hello pppppppp‘;
ele.append(son);
}

function remove() {
var ele = document.getElementById("div1");
var last_son = ele.lastElementChild;
ele.removeChild(last_son);

}

修改内容:
<em></em> 斜体
class操作
<div id="ID" class="div1 div2">adaffsskjhaijdkhakldhkahdaklhdk</div>
<input type="button" onclick="changebig()" value="big">
<input type="button" onclick="changesmall()" value="samll">
function changesmall() {
var ele = document.getElementById("ID");
// alert(ele.className);
ele.classList.add("bigger"); //css代码里有.bigger样式但是 html 标签里的class并没设置bigger这个名字 所以用这个函数
//把bigger添加到标签的class里 就可以改变样式了
ele.classList.remove("bigger"); //删除添加标签里class的名字bigger



// ele.style.fontSize = "15px"; //缩小字体
}
上面代码有重复 下面的代码传参数 避免重复代码
function change(a) {
var ele = document.getElementById("ID");
// alert(ele.className);
if (‘bigger‘ == a) {
alert(typeof a);
ele.classList.add(a); //css代码里有.bigger样式但是 html 标签里的class并没设置bigger这个名字 所以用这个函数
//把bigger添加到标签的class里 就可以改变样式了
alert(ele.className)
}
else {
ele.classList.remove(‘bigger‘); //删除添加标签里class的名字bigger
}
// ele.style.fontSize = "15px"; //缩小字体
}
如何修改 html dom
改变css样式
<p id=‘div‘>hello</p>
document.getElementById("div").style.color=‘blue‘;

****改变html
给div添加一个P标签
<div class="div1"></div>
<input id="add" type="button" value="add">
var ele = document.getElementById(‘add‘);
ele.onclick = function () {
var div1 = document.getElementsByClassName(‘div1‘)[0];
var img = document.createElement(‘img‘);
img.setAttribute(‘src‘,‘56.jpg‘); //给标签设定一个属性 一个名字一个值
img.src= ‘56.jpg‘; //这个也可以实现添加图片 这种写法是增强html 用这种
img.getAttribute(); //直接去拿属性名字 得到值
div1.appendChild(img);
};
创建标签:
createElement(div)
删除标签:
div1.removeChild(需要删除的标签)
class操作
div1.className;
div1.classList.add;
div1.classList.remove;
知识点:
<a href="javascript:vold(0)"></a> 跟onclick一样 事件触发 vold是阻拦返回值
加vold是点击不跳转 加个函数是跳转
<div onclick="show(this)">aaaaa</div> this 多级嵌套 在网页里点击aaaaa就是可以找到this 传参函数里要用self
this是代指当前标签对象



string

null和undefined以外 其他都是对象

html DOM
json xml 数据交换用的
核心DOM 针对任何结构化文档的标准类模
XML DOM 针对 XML 文档的标准模型
HTML DOM 针对 HTML 文档的标准模型
HTML DOM本身是个对象 里有5个对象 用的只有2个对象
element标签对象
所有标签都属于这个对象
document对象
text对象 比如hello word 不重要
atribuute 不重要
comment注释对象 不重要



BOM:可以和浏览器对话 onclick 标签的事件
浏览器对象 Window是一个全局对象可以直接应用
*****window对象:就一个标签 一个窗口对应一个html文本
alert() 是window的对象
confirm() 显示带有一段消息以及确认按钮和取消按钮的对话框 确认键和取消键 比如下载 保存
有返回值 点确认(true)和取消(false)
if (ret){。。。。。。。。}

prompt() 显示可提示用户输入的对话框 用户可以输入
有返回值 返回值是你输入的内容 取消是null


setInterval();定时器
var date_obj = new Date();
function gettime(){
var date_obj = new Date();
var year = date_obj.getFullYear();
var month = date_obj.getMonth() + 1;
var day = date_obj.getDate();
var week = date_obj.getDay();
var hour = date_obj.getHours();
var minute = date_obj.getMinutes();
var ceconds = date_obj.getSeconds();
// var min = date_obj.();
date_obj.getMilliSeconds;
// date_obj.get();
return year + ‘年‘ + month + ‘月‘ + f(day) + ‘日‘ + " " + hour + ‘:‘ + minute + ‘:‘ + ceconds + " " + num_week(week)
}

function num_week(n){
week = [‘星期日‘,‘星期一‘,‘星期二‘,‘星期三‘,‘星期四‘,‘星期五‘,‘星期六‘];
return week[n]
}

function f(num){
if (num < 10){
return ‘0‘ + num
}
else{
return num
}
}

// alert(gettime());

function begin() {
var stime = gettime();
var ret = document.getElementById("clock"); //找到id为clock的标签 通过函数找到标签
ret.value = stime;

}
var ID;//ID的用法 先定义一个外部var ID 下面两个函数内容 就可以修改ID了 第一次运行时ID是undefined
function begin_click() {
if (ID == undefined){ //如果ID 是个未赋值变量
begin();
ID = setInterval(begin, 1000); // 定时功能 每隔1秒执行一个词begin函数
//
}
}
function EnD() {
clearInterval(ID);//取消
ID = undefined //初始化成未赋值变量 这样if 就可以运行了
}

//重复的运行begin_click 会开启多个begin_click EnD只能关闭最后一个 所以之前的begin_click都在跑
setTimeout:

function Timeout() {
alert(123);
}
function f1() { 这个效果就是按钮触发 不设置函数 会自动触发
var ID = setTimeout(Timeout, 1000);//这个函数就触发一次
clearTimeout(ID) //清除效果 任务取消
}

history:
内部有三种方法和一个属性length back和forward 模拟浏览器的前进和后退 <- ->
history.forward();
//做一个a标签 把连接href连接到back的页面
history.back();
//返回到 上一个的那个页面
history.go();//可以实现以上2个方法的功能
//go(有三个参数 1 0 -1 正数是前进==forward 负数是后退==back 0是)
history.length;
//length 历史url的个数 页面经历过多少url

location:
location.reload() 刷新本页面 重载
location.href="http://www.baidu.com";//跳转 到别的地方





DOM 文档对象模型
BOM 浏览器对象
JS 是基于对象的语言

二级菜单

动态创建菜单
data = {‘河北‘:[‘保定‘,‘沧州‘]},{‘北京‘:[‘朝阳‘,‘昌平‘]}
二级联动
<select id="province" onchange="func1(this)">

</select>
<select id="city">

</select>

data = {‘河北‘:[‘保定‘,‘沧州‘],‘北京‘:[‘朝阳‘,‘昌平‘],‘山东‘:[‘青岛‘,‘济南‘]};
//这个步骤是在id标签里 添加 option 标签
var pro = document.getElementById(‘province‘);
for (var i in data){
var option_pro = document.createElement(‘option‘);
option_pro.innerHTML = i;
//alert(i); //这里的i 是data的键 不是索引
pro.appendChild(option_pro)
}
var city = document.getElementById(‘city‘);

//这里是拿到option标签 的键
function func1(self) { //传参this
self.selectedIndex; //拿到已经选中标签的索引
var choice = (self.options[self.selectedIndex]).innerHTML; //增强功能 拿到date的键
//清空上次执行的二级菜单
var options_city=city.children;
for (var i=0;i<options_city.length;i++){
city.removeChild(options_city[i]);//这里可以直接i--
i--;//因为上次把索引0删除了 索引1就变成了索引0 依次类推 导致索引1就会删不掉 要加个i--
}
//简单的写法
city.options.length=0;
//下面代码 是添加id city 拿到键的值
for (var i in data[choice]){
var option_city = document.createElement(‘option‘);
option_city.innerHTML = data[choice][i];
city.appendChild(option_city)
}
}

JS专用 先加载 在执行 有两个func函数的情况下 上面的函数会被覆盖 只执行2遍 下面的func函数
PY是从上至下执行

















‘‘‘
# a = 0
# i = 0 如果i是1的话 少执行了个1
# while i<100:
# i += 1
# a += i
#
#
# print(a)

a = (
‘123‘,‘456‘)
# join 是把一个列表拼接成一个字符串。 [a,b,c] join abca =
‘‘.join(a)
print(a)


# a=list([1,2,3,4])
# a=list((1,2,3,4))
# a=list(1,2,3,4) 错误的

以上是关于Java Script的主要内容,如果未能解决你的问题,请参考以下文章

LibreOffice Calc 中的脚本

unity3d 如何编程实现终止一个脚本的调用和重新调用

如何像 bdist_wininst 一样使用 bdist_rpm?

Java Switch

Java Math

Java 布尔运算