1.js运算符:~~为高位取整 eg: var ss = 2.123213;console.log(~~ss); 输出:2;
2.resize:$(window).resize(function(){});调整浏览器窗口大小时进行的操作
3.创建js对象:
http://blog.csdn.net/jinzhengquanqq/article/details/5821389
4.js正则表达式:
var str = "abbb34eftab0modabbbbb6";
var reg = /a(b)+\d+/;
var arr = str.match(reg);
for(var i = 0; i < arr.length; i++){
console.log(arr[i] + "---->"); //根据返回结果可知如果有g全局,那么返回所有匹配[abbb34,ab0,abbbbb6] //如果没有g全局,那么返回数组arr[0]为匹配的完整字串后面是括号里的捕获[abbb3,b,3];
}
5.if(!expression) expression = ""; 如果 expression 是 undefined(var ss;) 、0、false、null都会执行expression = "";
6.js数据类型
(1)js原始数据类型包括: 数字、字符串和布尔类型
(2)两个特殊的原始值:null(是一个object)和undeined
(3) js的类:Array,Function,RegExp、Math和Error,一般用过的是Array和RegExp、Math
(4)javascript是面向对象的语言,这意味着我们不用全局的去定义函数去操作不同类型的值,数据类型本来可以定义方法来使用值(a.sort()),而不是将a传入sort()函数来操作
a.sort();
(5)小数点(0.6=.6) Math.round(.6)=1
(6)NaN是一个特殊的数据类型,它和任何值都不相等: var ss = 'sdfas'; if(ss == NaN){console.log('ss equal NaN')}else{console.log('ss not equal NaN')}输出结果ss not equal NaN
(7)用new 生成的对象必须有构造函数 function Point(x,y)(ths.x = x;this.y=y;) var p = new Point(1,2);
给js构造对象添加函数 Point.prototype.round = function(){return Math.sqrt(this.x*this.x + this.y*this.y)}
7.javascript setTimeout 和 setInterval 区别
(1).明显的是一个是执行一次,一个是隔一个间隔执行一次
(2)setTimeout可以理解为同步操作,即等其他的操作完之后,再执行setTimeout对应的函数
8.JSON.parse(Str);在将json字符串转换成json的时候,千万记得将str.trim()截一下,不然会报错
9.js的函数传递参数和java的不一样,js定义函数的参数的个数和实际中用的时候传递过来的参数的个数不一定一样,可以比定义的函数的参数的个数多,也可以少
10.js三个等号和两个等号
var a =3;
var b ='3';
if(a === b){
alert("==");//这个判断不判断类型
}else{
alert("===");//三个等号判断是不是恒等,即类型是不是也一样
}
11.substring和substr(java中没有这个方法)
substring:是指定两个下标的截取,java一样,oracle没有这函数
substr:返回指定开始位置和指定长度的截取,oracle也是这样,java中没有这函数
12.apply和call的区别
参考:http://www.365mini.com/page/javascript-function-call.htm(这里面说明比较详细)
是函数具有的方法
function test(){
var arg = arguments[0];
var arg1 = arguments[1];
}
var aa = function(){
alert("ff");
};
functionObject.call( [ thisObj [, arg1 [, arg2 [, args...]]]] )
参数 | 描述 |
---|---|
thisObj | 可选/Object类型指定执行functionObject 函数时,函数内部this 指针引用的对象。 |
arg1 | 可选/任意类型调用functionObject 函数时传入的第1个参数。 |
arg2 | 可选/任意类型调用functionObject 函数时传入的第2个参数。 |
args | 可选/任意类型调用functionObject 函数时传入的更多参数,可以有多个。 |
test.call({},2,3);---第一个参数为test执行的时候this指针的指向哪个对象
var a1 = [2,6,3];
var a2 = [7,9,8];
alert("yy");
Array.prototype.push.call(a1,a2)
console.log(a1);
functionObject.apply( [ thisObj [, argsArray ]] )
参数 | 描述 |
---|---|
thisObj | 可选/Object类型指定执行functionObject 函数时,函数内部this 指针引用的对象。 |
argsArray | 可选/Array|argumens对象调用functionObject 函数时所传入的参数数组或arguments对象。 |
Math.max.apply(null,[2,6,5,3])----max函数只支持(a,b,c……)这种参数形式,不支持([a,b,c])--数组形式(apply只能传递数组的形式)
Array.prototype.push 可以实现两个数组合并
Array.prototype.push.apply(arr1,arr2); ---原理一样
http://blog.csdn.net/myhahaxiao/article/details/6952321
13.js中eval执行js脚本以及转json
var test = "function fn(){alert('11')};var a =1;a++;alert(a)";
eval(test);
var str = " { 'name' : 'value' , 'name1' : 'value1'}";
console.log(eval('('+str+')'));
14.js中的in运算符
1. alert("name" in cat1);.//判断name是不是cat1里面的一个属性
2.for(var pro in cat1);//循环判断cat1里面的属性; for(var i in arr)这是数组中的循环,i为索引,从0开始
15.函数声明和函数表达式
声明式函数与赋值式函数的区别在于:在JS的预编译期,声明式函数将会先被提取出来,然后才按顺序执行js代码。
alert(foo); // function foo() {} alert(bar); // undefined,不会报错 function foo() {} var bar = function bar_fn() {}; alert(foo); // function foo() {} alert(bar); // function bar_fn() {}
// 方法一:函数声明 function foo() {} // 方法二:函数表达式 var foo = function () {};方法一和方法二都创建了一个函数,且命名为
foo
,但是二者还是有区别的。JavaScript 解释器中存在一种变量声明被
提升(hoisting)
的机制,也就是说变量(函数)的声明会被提升到作用域的最前面,即使写代码的时候是写在最后面,也还是会被
提升
至最前面。
那么bar
究竟有没有被提升呢,其实用 var 声明的变量都会被提升,只不过是被先赋值为undefined
罢了,所以第二个 alert 弹出了 undefined
。
所以,JavaScript 引擎执行以上代码的顺序可能是这样的:
- 创建变量
foo
和bar
,并将它们都赋值为undefined
。 - 创建函数
foo
的函数体,并将其赋值给变量foo
。 - 执行前面的两个 alert。
- 创建函数
bar_fn
,并将其赋值给bar
。 - 执行后面的两个 alert。
16.js的执行顺序
JS是按照代码块来进行编译和执行的,代码块间相互独立,但变量和方法共享(就是这块出问题了只是这块后面的js不执行,但其他块的还是执行)
- <script type="text/javascript">
- alert(str);//因为没有定义str,所以浏览器会出错,下面的不能运行
- alert("我是代码块一");//没有运行到这里
- var test = "我是代码块一变量";
- </script>
- <script type="text/javascript">
- alert("我是代码块二"); //这里有运行到
- alert(test); //弹出"我是代码块一变量"
- </script>