概念描述:javaScript是一种基于对象和事件驱动并且相对安全性的客户端脚本语言 。
特点:松散性 继承机制 对象属性
数据类型: undefined null 布尔 string number object function函数不是数据类型
var box;
alert( typeof box); box是underfind类型
什么是真什么是假:
- 真:true 非空字符串 任何非零数字值 任何对象
- 假:false 空字符串 0和 NaN undefined
隐式转换和强制转换
parseInt(); 只能转换字符串至数值 遇到非数字就停止,开头非数字返回NaN;
parseFloat(); 只能识别第一个小数点后边的数值;
toString(); 数值转换成字符串;不包含null和undefined
string(); 强制转换 包含null和undefined
++box跟box++的区别:前者是先计算后赋值,后者是先赋值后计算
var box =100 + "100" //转让个人时候加号就是字符串连接符,而hi不是加法运算; 只要其中一个是字符串,
关系运算符中 如果两个都是数值字符串,那么就会进行第一个数字的比较 “3”>"22" true
break和continue语句的区别:break语句是立即退出循环,强制继续执行循环体后面的语句。continue语句是退出当前循环,继续后面的循环。
with语句:var n=box.name ==with(box){var n =name};
do while:先运行再判断
$(function(){
var box = 1;
do{
alert('box');
box++;
}while(<=5);
// while语句格式
var box =10;
whille(box<=5);
alert(box);
box++;
})
while语句:先判断再运行
for语句:for(var box=1;box<=5;box++){alert(box)};
for in 语句:var box = {
'name':'12',
'age':'15',
'height':'178'
}
for(var p in box){alert(p)}
.join(|); 默认情况下数组字符串会以逗号分隔开,使用join();方法可以用不同的分隔构建这个字符串
用instanceof来检测基本类型的值 返回布尔值
.concat();连接两个或多个数组 {var cArray = array1.concat(bArray);
cArray.splice(1,1);}
.push(); 末尾添加数组
.pop(); 删除末尾数组
栈方法是后进先出,列队方法是先进先出
.shift(); 删除数组开头的一个元素
.unshift(); 在数组开头添加一个元素
.reverse(); 逆向排序;
.sort(); 从小到大排序;
.slice(1,3);截取数组 只取1.2 3元素;
.splice(0,2); 删除数组 删除从第0个位置取2个
.splice(1,0,'江苏','盐城'); 从第一个插入点插入元素 0表示不删除
.splice(1,1,'100'); 替换
时间:
var data = new Date();
alert(data.toLocaleString());本地格式区域字符串
Data.parse(4/12/2007''); 返回的是一个毫秒数;
new Data(Data.parse(4/12/2007'')) //把毫秒数转换成看得懂的时间
.getFullYear(); 年
.getMonth() + 1; 月 月份是从0月开始的
.getData();
.getHours();
.getMinutes();
.getSecond();
call();和aply();的做用和区别:
做用:改变this的指向,第一个参数为你要传入的对象,传入后函数的this就指向了这个对象,后面的参数为你为函数传递的参数值;
区别:call可以传入多个参数;
apply只能传入两个参数,所以其第二个参数往往是作为数组形式传入
less跟scss的区别:
1.编译环境不同:less基于node,scss基于ruby;2.声明方式不同:less以@声明;scss以$声明。
什么是预处理器:
好处:可以让 CSS 更加简洁、适应性更强、可读性更佳,更易于代码的维护等。
jsonP原理:动态的创建一个Script标签,利用script,src访问不受限制,url后边要跟一个函数,对返回的数据做处理。
json跟jsonP的区别:json是一种数据交换格式,而jsonP是json的一种使用模式, 是基于json的
webSocket:是htm5开始提供的一种在单个TCP链接上进行全双工通讯的协议,在webSocket API中,浏览器和服务器只需要做一个握手的动作,然后浏览器和服务器之间就形成了一条快速通道,两者之间就直接可以数据互相传送。
浏览器 通过javaScript向服务器发出建立WebSocket链接请求,链接建立以后,客户端和服务器端就可以通过TCP连接 直接交换数据。当你 获取WebSocket连接后,可以通过send()的方法来向服务器发送数据 ,并通过onmessage事件来接收服务器返回的数据。
MySQL语句
查:select * from 表名
删:delete from 表名 where 条件 where ID= 2;
增:insert into 表名 values(0,1,2)
改:update 表名 set字段 = '值',where ID= 2;
基本类型和引用类型的区别 基本包装类型:就是字面量类型
引用类型的自定义方法和属性可以识别,基本类型的自定义方法和属性不可以识别,相同点:都可以识别内置属性和方法
toString() 把数字转换成字符串
toLocaleString() 本地化把数值转换成字符串
toFiexed(2) 小数点保留两位转换成字符串 四舍五入
charAt(1) 返回字符串指定下标的值
slice(3) 从第三个字符串开始截取
indexof() 返回字符串下标
toLowerCase() 字符串转小写
toUpperCase() 字符串转大写
replace()字符串替换
split(“ ”) 字符串以空格分隔成数组
*this表示new object实例化出来的一个对象,this要放在一个作用域下”
构造函数的示意图
function Box(user,age){
this.user = user; //实例属性
this.age = age;
this.run = function(){ //实例方法
return this.user + this.age + "gtt"
};
};
var box1 = new Box('lee',38)
var box2 = new Box('gtt',18)
alert(box1.run());
alert(box2.run());
box1 -->box{name:12;age:16}
box1 -->box{name:12;age:16}
原型的示意图
function Box(){};
Box.prototype.name = 'gtt'; // 原型属性
Box.prototype.age = 18;
Box.prototype.run = function(){ // 原型方法
return this.name + this.age + '我爱你'
}
var box1 = new Box();
var box2 = new Box();
alert(box1.run());
alert(box2.run());
box1 -->box{-proto-} \
同时指向 -->{name:14;age:18}
box2 -->box{-proto-} /
如果是实例方法,不同的实例化,他们的方法地址是不一样的是唯一的;如果是原型方法,她们的地址是共享的,大家都是一样的
如何判断一个变量是对象还是数组:
- 使用instanceof 要先判断是不是数组,否则都会返回opject
- 其中用prototype.toString.call()兼容性最好
去重
1、Set结构去重。
2、遍历,将值添加到新数组,用indexOf()判断值是否存在,已存在就不添加,达到去重效果。
let a = ['1','2','3',1,NaN,NaN,undefined,undefined,null,null, 'a','b','b'];
let unique = arr =>{
let newA=[];
arr.forEach(key => {
if( newA.indexOf(key)<0 ){ //遍历newA是否存在key,如果存在key会大于0就跳过push的那一步
newA.push(key);
}
});
return newA;
}
console.log(unique(a)) ;//["1", "2", "3", 1, NaN, NaN, undefined, null, "a", "b"]
//ps:这个方法不能分辨NaN,会出现两个NaN。是有问题的,下面那个方法好一点。
3、遍历,将数组的值添加到一个对象的属性名里,并给属性赋值,对象不能添加相同属性名,以这个为依据可以实现数组去重,然后用Object.keys(对象)返回这个对象可枚举属性组成的数组,这个数组就是去重后的数组。
let a = ['1', '2', '3', 1,NaN,NaN,undefined,undefined,null,null, 'a', 'b', 'b'];
const unique = arr => {
var obj = {}
arr.forEach(value => {
obj[value] = 0;//这步新添加一个属性,并赋值,如果不赋值的话,属性会添加不上去
})
return Object.keys(obj);//`Object.keys(对象)`返回这个对象可枚举属性组成的数组,这个数组就是去重后的数组
}
console.log(unique(a));//["1", "2", "3", "NaN", "undefined", "null", "a", "b"]
splice()将字符串转换成数组,join();将数组转换成字符串
在JS中 Object === Object 感觉没有任何问题 这两个都代表的一个东西
但是如果你试过 NaN === NaN 是返回false为什么呢?
NaN==NaN 返回false
因为NaN 是:Not a number (不是一个数字的缩写)
既然不是一个数字 那么很好理解 'A'不是一个数字 ,'B'也不是一个数字
那么既然他们两个都不是数字 ,难道'A' === 'B'吗? 显然不是
所以这个东西开出来是有原因的
排序
var numberArray = [3,6,2,4,1,5];
numberArray.sort(function(a,b){return b-a})
alert(numberArray)
获取浏览器可视范围的页面窗口
window.innerWidth //window.innerHeight
document.documenElement.clientWidth
document.documenElement.clientHeight
间歇调用
-
超时调用 var box= setTimeout(function(){alert('lee')},2000)
clearTimeout(box) 取消当前超时调用 -
间歇调用 var box = setInterval(function(){alert('lee'),2000})
clearInterval(box) 取消当前间歇调用
DOM操作等待html文档加载完毕才可以获取,可以把script标签放在后边 -
setAttribute();设置属性和值
-
scrollIntoView(); 设置指定可见
事件绑定和普通事件的区别
普通事件中的onclick是DOM0级事件只支持单个事件,会被其他onclick事件覆盖,而事件绑定中的addEventListener是DOM2级事件可以添加多个事件而不用担心被覆盖
css中那些属性可以被继承:
-
字体相关:line-height, font-family, font-size, font-style, font-variant, font-weight, font
-
文本相关: letter-spacing, text-align, text-indent, text-transform, word-spacing
-
列表相关:list-style-image, list-style-position, list-style-type, list-style
js原生值转json字符串:JSON.stringify()
json字符串转js原生值:JSON.parse()
网友评论