js学习

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 引擎执行以上代码的顺序可能是这样的:

  1. 创建变量 foo 和 bar,并将它们都赋值为 undefined
  2. 创建函数 foo 的函数体,并将其赋值给变量 foo
  3. 执行前面的两个 alert。
  4. 创建函数 bar_fn,并将其赋值给 bar
  5. 执行后面的两个 alert。

16.js的执行顺序

 JS是按照代码块来进行编译和执行的,代码块间相互独立,但变量和方法共享(就是这块出问题了只是这块后面的js不执行,但其他块的还是执行)

  1. <script type="text/javascript">  
  2.       alert(str);//因为没有定义str,所以浏览器会出错,下面的不能运行  
  3.       alert("我是代码块一");//没有运行到这里  
  4.       var test = "我是代码块一变量";  
  5. </script>  
  6. <script type="text/javascript">  
  7.       alert("我是代码块二"); //这里有运行到  
  8.       alert(test); //弹出"我是代码块一变量"  
  9. </script>  
而根据HTML文档流的执行顺序,需要在页面元素渲染前执行的js代码应该放在<body>前面的<script>代码块中,而需要在页面元素加载完后的js放在</body>元素后面,body标签的onload事件是在最后执行的。

17.js是单线程的,不能进行阻塞操作,可以通过打开一个新窗口(貌似jqueryui的confirm都是这么实现的)

18深入学习js,这个地址不错(http://www.365mini.com/page/javascript-function-call.htm)




  

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值