<script type="text/javascript">
alert("");
document.write("")
console.log("ss");</script> javascript代码写其中
<a href="javascript:alert('点击我');">sss</a> 弹出确认菜单
<a href="javascript:;">sss</a> //点击无变化
<script type="text/javascript" src="index.js">
</script>
引入外部内部不生效,需要的话再写一个标签
标识符不能以数字开头
标识符包括数字,字母,下划线,$ 并且不能是关键字和保留字
string中用\来表示转译比如:\t,\n,\r,\"
打印斜杠需要写个斜杠转译
typeof 变量 // 查看变量类型
Infinity类型为Number代表无穷
NaN表示not a number 也是一个字面量,类型也是Number
js浮点数运算不精确,金额计算一般扔到服务器
其他类型.tostring转换为String
由于null和undefined不能用tostring所以用String( 值)来转换
null转换0,undefined转换Nan
parseInt()和parseFloat() // 将字符串转换比如123px可以提取123,而Number()为Nan
从左向右直到第一个不为数字为止
数字加非数字,会将非数字转换数字再运算,null和任意数字运算为null。( 字符串的加法例外)字符串加字符转是拼接
Nan不和任何值相等,包括它本身
用isNan(值)来检测
三个等号不会进行类型转换
prompt(String)相当于scanner
质数
console.time(String) // 计时器String是名字
consloe.timeEnd(String) // 停止
根号
属性值可以任意,对象,null,undefined
var obj=new Object();但一般用var obj={}
for (var objKey in obj) {
//增强for循环
}
这个objkey是属性,不是value
var变量的创建调用时没声明的话是undrfined
这个fun2是undefined,所以调用函数报错
window.a 可以指定在全局变量中找
就近原则中,
就是undefined,不会找全局
函数中不用var都是全局变量,相当于window.变量
undefined和123
函数中的this为window对象,
工厂方法生产对象
构造函数
原型
alert(student.__proto__.hasOwnProperty("fun"));
重写tostring
var array = new Array();
array[0]=1;
alert(array[0]);
var returns = array.push("s", "ss");
push可以放多个元素,返回值是元素的个数
array.pop(); //弹出最后一个元素返回
array.unshift("aa"); //插入一个元素在数组的最前面
array.shift() //删除数组最前面的一个元素
相当于数组整体后移动
ie8以上的foreach需要穿函数
array.forEach(function (value) {
alert(value);
});
这个删除数组第index索引开始,一共count个的元素,删除后后面的元素会填充,数组长度会变小
var s = array.join("__"); //数组变成字符串用指定的符号隔离
返回第几天 0到6.周日到周六
var time = d.getTime(); //将时间转换为毫秒
不推荐的计时器
alert(strings.indexOf("a"))
alert(strings.slice(0,2)) //截取,左闭右开
strings.split("")
不会影响原字符串
reg=/a/i;
alert(reg.test("a")) //正则表达式,i表示忽略大小写,g的话表全局,reg类型object
reg=/a|b/i; a或者b
reg=/[^a-d]/i; //除了a到d
strings.search("/a[a-z]/") //匹配返回索引,or返回-1
var replace = strings.replace(/[a-z]/ig, “”); //g全局匹配
reg=/(ab){3}/ //括号里的出现几次
reg=/(ab){1,3}/ //括号里的出现1到3次
reg=/a{3,}/ //三次以上
reg=/a+/ //至少一个
reg=/a*/ //0或多个
reg=/a?/ //0或1
reg=/^a$/; //开头和结尾
\表示转译,比如它本身或“”点“”等
前后加“\b”表示这是个独立的单词
var s1 = string1.replace(/^\s*|\s*$/ig,""); //去除开头和结尾的空格
宿主对象
节点:构成html文档的基本单元
浏览器由上向下执行,js代码在上边,执行的时候页面还没加载,导致DOM对象没加载,所以
最优的还是将js写下面,但是写上面好管理
对于自结束标签,没有innerHtml。用元素.属性名来获取,innweText自闭和
id,name都可以,但是class不行但可以用className获取class的值
var tit = document.getElementById();
tit.children
返回所有子节点,不包括文本节点
parentNode跟parentElement除了前者是w3c标准,后者只ie支持
当父节点的nodeType不是1,即不是element节点的话,它的parentElement就会是null
一般情况parentNode可以取代parentElement的所有功能
parentElement匹配的是parent为element的情况,而parentNode匹配的则是parent为node的情况。element是包含在node里的,它的nodeType是1
文本输入框的输入的值是value属性的值
ie8支持,但是只返回一个元素,多个满足只返回第一个
var tit = document.querySelectorAll(".box div")
用这个返回list可以解决,查询只有一个也是返回数组集合
var cityBut = document.getElementById("button");
cityBut.onclick=function () {
var citys = document.querySelector(".citys");
var cityLi = document.createElement("li");
cityLi.innerHTML="西安";
citys.appendChild(cityLi);
}
父节点.replaceChild( 新节点,参考节点)
父节点removeChild(子节点)
citys.parentNode.removeChild("")
this.parentNode.removeChild(this); //没有父节点也能删掉自己
confirm(“是否删除”); boolean返回值
block.style.backgroundColor=“red”; // 改变元素样式,改的是内联样式
!important会在样式中有最高优先级,js也无法修改
currentstyle属性ie浏览器支持其他浏览器不支持,
var computedStyle = getComputedStyle(block,null);
alert(computedStyle.width)
这个ie8不支持
这两个都是只读样式
js对象属性 通过点(.) 和 方括号([]) 的不同之处
1、点操作符: 静态的。右侧必须是一个以属性名称命名的简单标识符。属性名用一个标识符来表示。
标识符必须直接出现再js程序中,它们不是数据类型,因此程序无法修改它们。
2、中括号操作符: 动态的。方括号里必须是一个计算结果为字符串的表达式,
属性名通过字符串表示。字符串是js的数据类型,再程序运行时可以修改和创建它们。
主要有以下区别:
1、[]--可以用变量作为属性名或访问,而点方法不可以;
2、[]中括号法--可以用数字作为属性名,而点语法不可以;
3, [] 可以动态访问的属性名,可以在程序运行时创建和修改属性,点操作符就不行!
4,如果属性名中包含会导致语法错误的字符,或者属性名是关键字或者保留字,也可以使用方括号表示法。
如:(属性名是关键字或者保留字--都可以点语法不严密,不报错,写法提示有错)
解决兼容问题
function getStyle(obj,name){
if (window.getComputedStyle(obj,null)){
return getComputedStyle(obj,null)[name];
}
else {
return obj.currentstyle[name];
}
}
标准css盒模型width就是内容的宽度,不包括padding,border和margin
元素的onmousemove属性检测鼠标移动
ie8以下是window.event,火狐是用event实参传递
var elementA = document.getElementById("list-a");
elementA.onclick=function (event) {
var event=event||window.event;
if (event.target.className=="link"){ //获得点击的对象
alert("ily");
}
} contains不成功
elementA.addEventListener(“click”,function () {
alert(“二绑定”)
},null);
ie8和以下的不支持
elementA.attachEvent(“onclick”,function () {
alert(“mm”);
}) ;
其他浏览器不支持
function bind(obj,eventr,callback){
if (obj.addEventListener){
obj.addEventListener(eventr,callback,false);
}
else {
obj.attachEvent("on"+eventr,function () {
callback.call(obj);
});
}
}
this统一为obj
按下的时候设置
不会捕捉到文字,他自己拦下所有时事件
松开鼠标设置这个,取消捕获
这两个方法只有ie认可,火狐等松开时加return false
var sub = document.getElementById("sub");
sub.onkeydown=function (event) {
event=event||window.event;
if (event.keyCode==13){
alert("数据提交")
}
} //回车提交
var ua = navigator.userAgent;
alert(ua)
if ("ActiveXObject" in window){
alert("ie11找到");
}else if (/firefox/i.test(ua)){
alert("你是火狐")
}else if (/chrome/i.test(ua)){
alert("你是谷歌")
}else if (/msie/i.test(ua)){
alert("你是ie")
}
userAgent描述浏览器信息
history.back();history.forward();history.go(数字),相当于前两个
开启定时器之前关闭,避免出现多个定时器在跑的情况
sub.className+= “?” // 注意空格,class之間
function hasClass(obj,classname){
var exp = new RegExp("\\b"+classname+"\\b");
return exp.test(obj.className);
}
判断对象是否包含className
Json
var stu={name:"wod",age:11};
var jsonstu = JSON.stringify(stu); //js对象转Json对象
alert(jsonstu);
var stu = JSON.parse(jsonstu); //Json对象转js对象
alert(stu.age);
由于Ie7不兼容
执行字符串。不安全
如果需要兼容IE7和以下,可以引入外部js(网上查)
注:Json的属性需要双引号。{}外需要单引号
js高级
三个等号和typeof 能判断undefined
三个等号判断null
函数===“function” 返回true
我得到表达式是函数的话加括号就可以执行
console.log===“function” 是true
b1.b3()(),返回函数,再调用返回字符串
typeof null返回Object,但是null为基本类型
函数执行完成后局部变量自动释放,obj消失,对象成为垃圾对象,所以值还是前面的
可以说obj是a的拷贝
var a=1;
function ch(a) {
a=a+1;
}
ch(a);
alert(a);
这里的a也是1,但是
var a=1;
function ch(a) {
window.a=a+1;
}
ch(a);
alert(a);
全局遍历就是2了
对象:保存多个数据的容器
用它为了统一管理多个数据
属性含有特殊字符比如空格或——等或变量名为变量,只能用中括号,不能用点
匿名函数(IME)
函数.call(对象,“back”),表示将函数作为对象的函数,this则指的是obj
形参:变量 实参:变量的值
函数:多条语句的封装体
回调函数:手动定义,没有手动调用,在特定条件下执行的函数
this
函数的prototype属性:
每个函数都有一个prototype属性,它默认指向一个Object空对象,即原型对象
alert(f.prototype.constructor===f) //这样返回true
Object的隐式原型对象为null
function f1() {
} 相当于 var f1=new Function();
所有函数的隐式原型都是Function的现式原型
变量提升和作用域
123321
变量提升然后函数提升 最终是“function”
function c(c) {
alert(c);
}
c=1;
c(2);
报错
函数是Function的实例
作用域
沒有块作用域
作用域n+1,n指的函数个数
隔离变量:不同作用域下命题相同不会冲突
两个函数作用域,加一个全局作用域,结果是10
第一个输出函数,第二个报错
btns是个伪数组,他的length每次都要进行计算
i是全局变量,所以函数会在for循环结束后执行,它的值就变成3
闭包
两个函数嵌套,子函数引用外部函数的变量产生闭包
调用外部函数,子函数执行函数定义产生闭包(closure对象,里面有外部函数变量)
闭包产生次数和外部函数调用次数相等
作用
缺点 :函数执行后局部变量没及时释放,占用内存时间变长,造成内存泄漏
内存泄漏:
意外的全局变量,没有清理的计时器或回调函数,闭包
window的name
onb2的name
进程和线程
进程:程序的一次运行,占有独立的一片空间,能通过任务管理器查看
线程:进程内的一个独立单元。程序执行的一个完整流程,cpu最小的调度单元