javascript一些知识点记录

1.substring,slice,substr的用法

substring 和slice 都有startIndex 和 endIndex(不包括endInex),区别就在于slice取负数;

例如:var str='x123';

slice(-1,-2) -1指的就是3 负-2指的就是2; substring的中的负数,当做零来处理

substring中可以颠倒startIndex 和 endIndex的顺序,它会自动将最小的识别为开始的索引,最大的为结束索引;

substr(startIndex,length);开始位置,然后指定要截取的长度

2.instanceof 的用法

我们用一段伪代码来解释它的作用原理:

 //接下来我们用伪代码来解释instance of 的使用滴啊
function instance_of(l,r){
//l表示 表达式的左边
//r表示 表示的右边
var prototype=r.prototype;
var l=l.__proto__;
while(true){
if(l===null){
return false;
}
if(prototype===l){
return true;
}else{
//继续循环
l=l.__proto__;//往上一层循环滴呀
}
}
}
function prove(){
//有了上面的代码我们就可以证明
alert(Array instanceof Object);
alert(Date instanceof Object);
alert(Function instanceof Object);
alert(Number instanceof Object);
alert(Boolean instanceof Object);
alert(String instanceof Object);
//以上都是true alert(Number instanceof Number); //false
var num=new Number(1);
alert(num instanceof Number); //true //同样的
alert(String instanceof String);//false }

 3.javascript:void(expression)的使用

点击后不做任何事情

<a href="javascript:void(0)">click</a>
<a href="javascript:;">click</a>
<a href="####">click</a>

ps:补充一点小知识;

void 是javascript的操作符,意思是:只执行表达式,但没有返回值;

<a href="#">click</> 默认的锚点跳转是我们的top 页面首页;

点击后响应用户自定义的事件;

<a href="javascript:void(0)" onclick="doSomething()">click</a>
<a href="#" onclick="doSomething;return false;">click</a>

再来一个小实例:

  function newPage(param,obj){
obj.target="_blank";
obj.href="web/info/data?"+param;
obj.click();
}

html代码

<a href="javascript:void(0)" onclick="newPage(3,this)">go</a>

4.默认事件和阻止默认事件

事件捕获阶段:事件从最上一级标签开始往下查找,直到捕获到事件目标(target)。

事件冒泡阶段:事件从事件目标(target)开始,往上冒泡直到页面的最上一级标签。

 两种模型 
 以前,Netscape和Microsoft是不同的实现方式。

Netscape中,div先触发,这就叫做事件捕获。

Microsoft中,p先触发,这就叫做事件冒泡。

 W3C模型
 W3C模型是将两者进行中和,在W3C模型中,任何事件发生时,先从顶层开始进行事件捕获,直到事件触发到达了事件源元素。

然后,再从事件源往上进行 事件冒泡,直到到达document。

ele.addEventListener('click',doSomething2,true)

true=捕获

false=冒泡

(IE只支持事件冒泡)

 事件传播的阻止

 在w3c中,使用的是stopPropagation

ie中,设置cancleBubble=true

 阻止默认事件

在w3c中,使用preventDefault()方法

在ie下,使用window.event.returnValue=false;

 5.获取行间样式;

   //样式的获取
function getStyle(obj,name){
if(obj.currentStyle!=undefined){
return obj.currentStyle[name];
}else{
return getComputedStyle(obj,false)[name];
}
}

 6.Javascript中callee和caller的作用

calle的定义:返回一个对函数的引用,该函数调用了当前函数。r

如果是自己的函数体内调用该方法:则返回null;

实例:

  function a(){
alert(a.caller); //返回的是空
}
a();
function b(){
a(); //alert 弹出的是b(函数对象引用),也就是是 function b(){alert(a())}
}
b();

callee的定义:返回正在执行的函数本身的引用,它是arguments的一个属性;

注意:

1 这个属性只有在函数执行时才有效;

2它有个length属性,可以用来获得形惨的个数;因此可以用来比较形参和实参个数是否一致;

arguments.call.length 和arguments.length;

3.可以用来进行匿名函数递归

实例:

 var a=function (){

    alert(arguments.callee);//返回额函数体函数的引用 也就是 function (){alert(arguments.callee)} 

 }
var b=function (){
a(); //返回额函数体函数的引用 也就是 function (){alert(arguments.callee)} ,不是调用它的函数体
} b();

那么问题来了?如果一对兔子每月生一对兔子;一对新生兔,从第二个月起就开始生兔子;假定每对兔子都是一雌一雄,试问一对兔子,第n个月能繁殖成多少

对兔子?(使用callee完成)

var result=[];
function fn(n){
if(n==1){
return 1;
}else if(n==2){
return 2;
}else{
if (result[n]){
return result[n];
}else{
//arguments.callee() 表示函数体本身,也就是fn
result[n]=arguments.callee(n-1)+arguments.call(n-2);
return result[n];
}
}
}

 

7.关于获取的一个简单封装

   var obj={
$id:function(id){
return document.getElementById(id);
},
getByClass:function(className,parent){
var oParent=parent?this.$id(parent):document;
if(oParent.getElementsByClassName){
return oParent.getElementsByClassName(className);
}else{
var result=[];
//获取父元素下的所有元素
var childs=oParent.getElementsByTagName('*');
for(var i=0,len=childs.length;i<len;i++){
if(childs[i].className==className){
result.push(childs[i]);
}
}
return result;
}
},
getFirstByClass:function (className,parent){
var eles=this.getByClass(className,parent);
return eles[0];
}
}

 8.bind的用法

在EcmaScript5中也扩展了叫bind的方法(IE6,7,8不支持)

具体看实例:

  function func(name,id){
console.log(name,id,this);
}
func('jack','son');
//使用bind 返回改变上文的this后的函数;
var a=func.bind('jack','son',"-->");
a();//这样才执行滴呀 //call是改变上下文并执行函数
var b=func.call('jack','son',"-->");

参数方面的特点:

  function f(a,b,c){
console.log(a,b,c);
}
var f_extend=f.bind(null,'extend_A');
f('a','b','c'); //结果a b c
f_extend('a','b','c'); //结果 extend_A a b
f_extend('b','c'); //结果 extend_A b c
//结论:实参则是在bind中传入参数的基础上往后

9.关于Array.prototype.slice用途

将像arguments那种的类数组对象转换为数组的形式

实例:(至于原理,我以后再研究)

  function test1(){
var a={length:2,0:'first',1:'seconde'};
var b=Array.prototype.slice.call(a);
console.log(b); // ["first", "seconde"]
//Array.prototype.slice.call(arguments)能将具有length属性的对象转成数组,
//除了IE下的节点集合(因为ie下的dom对象是以com对象的形式实现的,
//js对象与com对象不能进行转换) //对于字符串
var c="today";
var d=Array.prototype.slice.call(c);
console.log(d); //["t", "o", "d", "a", "y"] //对于数字
var num=12345;
var numVal=Array.prototype.slice.call(num);
console.log(numVal);//[] 空的 var jq={length:2};
var jqVal=Array.prototype.slice.call(jq);
console.log(jqVal); //[] 空的
console.log(jq.length); // //也可以将选中的DOM元素转换成数组 }
test1();
//在IE下就会有误

 10.递归的使用

//递归:方式一
function gui(num){
if(num<=1){
return 1;
}else{
return num*gui(num-1)
}
}
alert(gui(5));
//递归方式二: 使用命名函数表达式实现递归
var factorial=(function f(num){
if(num<=1){
return 1;
}else {
return num * f(num-1);
}
});
alert(factorial(5));

 11.querySelector和querySelectorAll 的用法

定义: querySelector 将返回匹配到的第一个元素,如果没有匹配的元素则返回 Null。

querySelectorAll 返回一个包含匹配到的元素的数组,如果没有匹配的元素则返回的数组为空

实例:

   window.onload=function (){

     var obj=document.querySelector("#outer");
var obj0=document.querySelectorAll("#outer")[0]; //tmd 的 这个是支持我们css的选择器滴呀
var obj=document.querySelector("div.test>p:first-child");
var obj0=document.querySelectorAll("div.test >p:first-child")[0];
var objlist=document.querySelectorAll('div.test>p'); //这个将以数组的形式显示滴呀
//这是原生方法,比起jquery速度快,缺点是IE6、7不支持。 var list=document.querySelectorAll(".info");
var len=list.length;
for(var i=0;i<len;i++){
list[i].style.fontWeight='bold';
}
}

bug-以及解决方案

html

<div class="test" id="testId">
<p><span>Test</span></p>
</div>

js:

   function show(){
var obj=document.getElementById("testId");
var ele=obj.querySelector('.test span');
var eleList=obj.querySelectorAll('.test span'); console.log(ele); //<span>Test</span>>
console.log(eleList);//[span] }

按照W3C的来理解,这个例子应该返回:element:null;elementList:[];

因为作为baseElement的 testElement里面根本没有符合selectors的匹配子节点;

但浏览器却好像无视了baseElement,只在乎selectors,也就是说此时baseElement近乎document;

这和我们的预期结果不合,也许随着浏览器的不断升级,这个问题会得到统一口径!(也就是说,没有限制到收索范围)

用jquery把,

12.javascript中的私有变量(块级作用域)

实例一

(function (window){
var name='jack';
var F=function (){};
F.prototype.getName=function (){
return name;
};
F.prototype.setName=function (str){
name=str;
};
window.F=F; //相当于初始化
//独立的块级作用区域
//避免申明大量的公共变量;
})(window);
var a=new F();
a.getName();
a.setName('tom');
a.getName();

实例二

(function ($){
$("#id");
})(jQuery);

13.$.extend 和$.fn.extend的区别

//extend的基本使用
var target={name:'jack',fn:function (){alert('')}};
var obj={age:18,show:function (){alert('show')}};
var newTarget=$.extend(target,obj);
//新的对象就有了旧的对象的方法;
//给我们的targe添加扩展
newTarget.show();
alert(newTarget.age); //如果没有设定target对象,则,扩展的是我们jQuery对象的方法;
$.extend({
test:function (){
alert('test');
}
})
//使用
$.test();
/*
$.fn=$.prototype
//这个就是原型滴呀
*/
$.fn.extend({
check:function (){
alert('check');
}
})
//这样调用无效
$.check();
//应该制定到某个对象上
$("#info").check();

 14 eq 和get 

   eq返回的是一个jquery对象,get返回的是一个html 对象数组

15.js数组排序的问题

 看代码

function Person(name,age){
this.name=name;
this.age=age;
} function show(){
//sort方法是按ascii字母顺序排序的
var arr1=['b','a','c'];
var result=arr1.sort();
console.log(arr1); // a b c
console.log(result); // a b c var arr2=[0,21,4];
var result=arr2.sort();
console.log(arr2); //0 21 4
console.log(result); //0 21 4 //正确的写法;
var arr3=[0,21,4];
arr3.sort(function (a,b){
return a-b;
})
console.log(arr3); //0 21 4 var arr4=[0,21,4];
arr4.sort(function (a,b){
return b-a;
})
console.log(arr4); //21 4 0 //自定义对象的排序的呀
var arr5=[];
arr5.push(new Person('jack',19));
arr5.push(new Person('Tom',18));
arr5.push(new Person('frank',20)); arr5.sort(function (a,b){
return a.age-b.age;
}) console.log(arr5);
}

顺便补充一下随机数的生成。

//放置重复的覆盖独享的值滴啊
function show(){
//这个是生成一个0-1之间的浮点数
var num=Math.random();
console.log(num);
//1-10
var val1=Math.floor(Math.random()*10+1);
console.log(val1);
//0-9
var val2=Math.floor(Math.random()*10);
console.log(val2);
}
//返回一个指定范围的随机数滴呀
var rand={};
rand.get=function (start,end){
return Math.floor(Math.random()*(end-start)+begin);
}

 16.字符串和json之间的互相转换

   //方式一:eval
function strToJson(str){
var data=eval('('+str+')')
return data;
}
//第二种是使用一种new function的方式滴呀
function strToJson1(str){
var json=(new Function("return"+str))();
return json;
}
//方式三:使用全局的对象;
function strToJson2(str){
return JSON.parse(str);
//使用JSON.parse需严格遵守JSON规范,如属性都需用引号引起来
//jQuery中也有将字符串转为JSON格式的方法jQuery.parseJSON( json ),
//接受一个标准格式的 JSON 字符串,并返回解析后的 JavaScript (JSON)
} //同样我们也有jsonto字符串额转换方式滴呀;
function jsonToStr(json){
//在Firefox,chrome,opera,safari,ie9,ie8等高级浏览器直接可以用JSON对象的stringify()
var result=JSON.stringify(json);
return result;
}

 17. 利用createDocumentFragment,进行优化

    function slowAdd(){
for(var i=0;i<10000;i++){
var span=document.createElement('span');
var text=document.createTextNode('nodeValue');
span.appendChild(text);
document.body.appendChild(span);
}
} function fastAdd(){
var oFragMent=document.createDocumentFragment();
for(var i=0;i<10000;i++){
var span=document.createElement('span');
var text=document.createTextNode('data');
span.appendChild(text);
oFragMent.appenChild(span);
}
document.body.appendChild(oFragMent);
}

javascript知识点记录(1)的更多相关文章

  1. Javascript知识点记录(三)设计模式

    Javascript设计模式记录,这个方面确实是没写过,工作中也没有用到js设计模式的地方. prototype与面向对象取舍 使用prototype原型继承和使用面向对象,都可以实现闭包的效果.那么 ...

  2. Javascript知识点记录(二)

    Javascript入门易,精通难,基本上是共识的一个观点.在这个篇幅里,主要对一些难点进行记录. 鸭子类型 Javascript属于动态类型语言的一种.对变量类型的宽容,给了很大的灵活性.由于无需类 ...

  3. javascript知识点记录(2)

    1.js 异步加载和同步加载 异步加载模式也叫非阻塞模式,浏览器在下载js的同时,同时还会执行后续的页面处理, 在script标签内,用创建一个script元素,并插入到document中,这样就是异 ...

  4. JavaScript算法与数据结构知识点记录

    JavaScript算法与数据结构知识点记录 zhanweifu

  5. 【千纸诗书】—— PHP/MySQL二手书网站后台开发之知识点记录

    前言:使用PHP和MySQL开发后台管理系统的过程中,发现有一些通用的[套路小Tip],这里集中记录一下.结合工作中ing的后台业务,我逐渐体会到:除了技术知识外.能使用户体验好的“使用流程设计”积累 ...

  6. C#知识点记录

    用于记录C#知识要点. 参考:CLR via C#.C#并发编程.MSDN.百度 记录方式:读每本书,先看一遍,然后第二遍的时候,写笔记. CLR:公共语言运行时(Common Language Ru ...

  7. spring mvc开发过程知识点记录

    给一个客户做的一个小项目,需求就是输入类似一个短网址http://dd.yy/xxxx然后跳转到另外一个域名下的图书文件.(实际很多短网址站都提供API供调用吧,不过客户需求是他自己建立一个短网址服务 ...

  8. JavaScript知识点整理(一)

    JavaScript知识点(一)包括 数据类型.表达式和运算符.语句.对象.数组. 一.数据类型 1) js中6种数据类型:弱类型特性 5种原始类型:number(数字).string(字符串).bo ...

  9. javascript知识点积累

    8年javascript知识点积累   08年毕业就开始接触javascript,当时是做asp.net发现很多功能用asp.net控件解决不了,比如checkbox单选,全选问题,自动计算总价问题, ...

随机推荐

  1. 【BZOJ】1878: [SDOI2009]HH的项链(树状数组)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1878 我太弱了,看题解才过的. 一开始看到此题,我想了想在线做法,但之后觉得这个想法可能是错的:维护 ...

  2. NOIP200003方格取数

    NOIP200003方格取数 难度级别: D: 编程语言:不限:运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 XYZ 是首师大附中信息技术团编 ...

  3. [简单]poi word2007表格按模版样式填充行数据

    主要实现了按照模版行的样式填充数据,针对的是动态数据,静态数据可以直接替换变量实现,先说下缺点:1)暂未实现特殊样式填充(如列合并(跨行合并)),只能用于普通样式(如段落间距 缩进 字体 对齐)2)数 ...

  4. v.size() return size_t not int 返回无符号整型数

    In the C++ STL, the vector size() function return size_t, which is unsigned int, not int. So imagine ...

  5. php 类

    <?php class mysql{ private $host; private $name; private $pass; private $table; private $ut; func ...

  6. Html 5+

    audio Audio模块用于提供音频的录制和播放功能,可调用系统的麦克风设备进行录音操作,也可调用系统的扬声器设备播放音频文件.通过plus.audio获取音频管理对象. http://www.ht ...

  7. .NET中资料库的设计与SQL

    .NET中资料库的设计与SQL ADO.NET设计 先来说说资料库的设计 主要涉及 关联式资料库 资料库系统管理(DBMS) 结构化查询(SQL) 预储程序 一个资料库包含一个以上的资料表,每个资料表 ...

  8. Task Scheduler Error and Success Constants (Windows)

    If an error occurs, the Task Scheduler APIs can return one of the following error codes as an HRESUL ...

  9. HDU 2091 空心三角形(模拟)

    把一个字符三角形掏空,就能节省材料成本,减轻重量,但关键是为了追求另一种视觉效果.在设计的过程中,需要给出各种花纹的材料和大小尺寸的三角形样板,通过电脑临时做出来,以便看看效果.   Input 每行 ...

  10. NV 200, 300, 400, 500, 600, 700, 800

    NV GF6系列架构分析(GPU gem2 读书笔记) http://www.cnblogs.com/wangdaniu/archive/2006/02/20/334089.html 总线带宽:PCI ...