javascript基础复习/重新学习

与其说复习,不如说重新学习。这里记录一下学习过程中想要记录的东西,以便于以后温习。

ECMAScript原始数据类型:String、Number、Boolean、Undefined、Null

对变量或者值调用typeof运算符将返回下列值之一:

undefined - 如果变量是Undefined类型的

string - 如果变量是String类型的

number - 如果变量是Number类型的

boolean - 如果变量是Boolean类型的

object - 如果变量是一种引用类型或Null类型

function-如果变量是一个函数

ECMAScript运算符

一元运算符 

delete 只能删除开发者定义的属性和方法,不能删除ECMAScript的原始方法,例如toString()

var o={name:"minnie",age:8};
alert(o.name);//输出minnie;
delete o.name
alert(o.name);//输出undefined;

void 运算符对任何值返回undefined。该运算符通常用于避免输出不应该输出的值。例如

<a href="javascript:window.open(‘about:blank‘)">click me</a>

当在页面点击"click me"时,即可看到屏幕上显示【object】,使用

<a href="javascript:void(window.open(‘about:blank‘))">click me</a>

void使window.open()返回undefined,undefined不是有效值,不会显示在浏览器窗口。

注:高版本浏览器并未出现【object】情况

前增量/前减量运算符  ++/--运算符

加减执行在计算表达式之前,所以在执行表达式的时候已经加减过,所以表达式的值和参数的值一致。

javascript语言的特殊之处:

1.函数内部可以直接读取全局变量

2.函数内部声明变量必须用var,否则声明的是一个全局变量(全局变量声明可以不用 var)

闭包的最大优点:

1.在函数外部访问函数内部的变量

2.让这些变量的值始终保持在内存中

闭包的缺点:

1.闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄漏。解决方法是,在退出函数之前,将不使用的局部变量全部删除。

2.闭包会在父函数外部改变函数内部变量的值。所以,如果把父函数当做对象使用,把闭包当作它的公用方法,把内部变量当作它的私有属性,这时一定要小心,不要随便改变父函数内部变量的值。

闭包陷阱一:

function createFunctions(){
  var result = new Array();
  for (var i=0; i < 10; i++){
    result[i] = function(){
      return i;
    };
  }
  return result;
}
var funcs = createFunctions();
for (var i=0; i < funcs.length; i++){
  console.log(funcs[i]());
}

乍一看,以为输出0-9,其实输出10个10;这里的陷阱就是函数带()才是执行函数

总结:闭包就是一个函数引用另一个函数的变量,因为变量被引用着所以不会被回收;不必要的引用(闭包)就是徒增内存消耗。

javascript的原型(原型链和作用域链)

一切(引用类型)都是对象,对象是属性的集合。

------------------------------------------------------------------------------------------------------------------

==和===的区别

== 等于(值)  会将引用类型转换为基本类型做比较

使用==进行比较的时候,如果是引用类型会先转为基本类型,对象转换为基本类型时默认先使用valueOf转,再使用toString()转,Date先使用toString()转。如下代码测试:

var x = "";
var obj = {toString : function(){x="toString";return 0},valueOf : function(){x="valueOf";return 0}};
console.log(obj==0,x);//true,"valueOf"
var x = "";
var obj = {toString : function(){x="toString";return 0}};
console.log(obj==0,x);//true,"toString"

使用==比较也可能有副作用,甚至会产生异常

var x = "";
var obj = {toString : function(){x="toString";return {}}};
console.log(obj==0,x);//Uncaught TypeError:Cannot convert object to primitive value

=== 全等(值和类型)

----------------------------------------------------------------------------------------------------

__proto__

每个对象都有一个__proto__属性,指向创建该对象的函数的prototype.

------------------------------------------------------------------------------------------------------

instanceof 运算符

判断规则:

A instanceof B  (个人理解为:判断A是否指向B的原型。A(对象有一个隐藏属性__proto__)B(函数有一个默认属性prototype))

A--对象  B--函数

instanceof判断规则是:沿着A的__proto__这条线来找,同时沿着B的prototype这条线来找,如果两条线能找到同一个引用,即是同一个对象,那么就返回true;如果找到重点还未重合,则返回false。

例如:

console.log(Object instanceof Function);//true
//Object.__proto__ === Function.prototype
console.log(Function instanceof Object);//true
//Function.__proto === Function.prototype === Function.prototype.__proto__ === Object.prototype;
console.log(Function instanceof Function);//true
//Function.__proto__ === Function.protorype

总结:instanceof表示的就是一种继承关系,或者原型链的结构

函数是一种对象,对象由函数生成。

--------------------------------------------------------------------------------------------------------

Object.prototype.hasOwnProperty

所有对象都有Object.prototype的方法,所有函数都有call,apply方法,都有length,arguments,caller等属性。

-------------------------------------------------------------------------------------------------------

in运算符

prop in Object  指定属性(只能是属性名,数组只能是索引值)存在于指定对象中

使用delete运算符删除一个属性,则in运算符对所删除属性返回false:

var str = {"name":"minnie","age":8,"class":"xiaoxue"};
delete str.class;
"class" in str;//false;

将属性赋值为undefined,则in运算符依然返回true.

var str = {"name":"minnie","age":8,"class":"xiaoxue"};
str.class = undefined;
"class" in str;//true

如果属性是从原型链上继承的,in运算符也会返回true

"toString" in {};//true

变量、函数声明、函数表达式

javascript在执行一个代码段之前,会先有准备工作,然后才是代码的执行。这个“代码段”分为三种情况--全局、函数、eval

准备工作:

1.变量的声明

2.函数表达式上的变量声明  默认赋值为undefined

3.this赋值

4.函数声明--赋值

这些步骤组成了“执行上下文”或者“执行上下文环境”

时间: 2024-11-30 05:32:30

javascript基础复习/重新学习的相关文章

javaScript基础复习

1.它是由Netscape的Brendan Eich创造 JSP不同于java是代码不需要编译,是嵌入到浏览器中的,和java的关系就像北大和北大青鸟 微软的JScript和SunMicrosystems的JavaScript几乎完全相同 支持ECMA(标准化的脚本语音)是Jscript和JavaScript的共同目标 2.JQuery 是一个JavaScript库,实际上是对JavaScript中最复杂和最耗时的任务的一个简单封装,如DOM,事件处理和动画. JQuery是改变JavaScri

javascript基础学习(十五)

javascript之cookie 学习要点: cookie介绍 创建与获取cookie cookie的编码 cookie的生存期 cookie的路径 cookie的domain cookie的secure 一.cookie介绍 cookie实际上就是一些信息,这些信息以文件的形式存储在客户端计算机上.在javascript中,cookie主要用来保存状态,或用于识别身份. 二.创建与获取cookie 创建cookie的语法代码如下所示:document.cookie="name=value&q

javascript基础学习(八)

javascript之日期对象 学习要点: 日期对象 将日期对象转换为字符串 将日期对象中的日期和时间转换为字符串 日期对象中的日期 日期对象中的时间 设置日期对象中的日期 设置日期对象中的时间 与毫秒相关的方法 一.日期对象 在javascript中并没有日期型的数据类型,但是提供了一个日期对象可以操作日期和时间. 日期对象的创建: new Date(); 二.将日期对象转换为字符串 将日期对象转换为字符串可以使用以下4种方法: date.toString();//将日期对象转换为字符串时,采

javascript基础学习(二)

javascript的数据类型 学习要点: typeof操作符 五种简单数据类型:Undefined.String.Number.Null.Boolean 引用数据类型:数组和对象 一.typeof操作符 typeof操作符用来检测变量的数据类型,操作符可以操作变量也可以操作字面量. 对变量或值运用typeof操作符得到如下值: undefined----如果变量是Undefined类型: boolean-------如果变量是Boolean类型: number-------如果变量是Numbe

学习之Javascript基础

1)HTML只是描述网页长相的标记语言,JavaScript是一种在浏览器端执行的语言,简称为JS,JavaScript是解释性语言,无需编译就可以随时运行,没有语法错误的部分还是能正确运行. 2)VS2010中有Javascript.JQuery的自动完成功能 3)JS点儿不出来的成员也许可用,点儿处理的成员也许不可用 4)VS2008的HTML编辑器中触发JavaScript自动完成:Ctrl+J 5)JS标签: <script type="text/javascript"&

一步步学习javascript基础篇(3):Object、Function等引用类型

我们在<一步步学习javascript基础篇(1):基本概念>中简单的介绍了五种基本数据类型Undefined.Null.Boolean.Number和String.今天我们主要介绍下复杂数据类型(即引用数据类型) Object类型 我们用的最多的引用类型就属object类型了,一般用来存储和传输数据是再好不过的.然,它的两种创建方式我们是否了解呢? 1.通过构造函数来创建 如: var obj = new Object(); 在js中的引用类型有个非常灵活的用法,可以动态的附加属性和赋值.

[转载] 几张非常有意义的JavaScript基础学习思维图

原文:http://www.w3cfuns.com/forum.php?mod=viewthread&tid=5598364&extra=page%3D1%26filter%3Ddigest%26digest%3D1%26digest%3D1 1.JavaScript 数组 2.JavaScript 函数基础 3.Javascript 运算符 4.JavaScript 流程控制 5.JavaScript 正则表达式 6.JavaScript 字符串函数 7.JavaScript 数据类型

javascript基础学习(十二)

javascript之BOM 学习要点: 屏幕对象 History对象 Location对象 一.屏幕对象 Screen对象是一个由javascript自动创建的对象,该对象的主要作用是描述客户端的显示器的信息. 目前显示器分辨率为800X600或1024X768两种. screen.height:屏幕的高度 screen.width:屏幕的宽度 screen.availHeigh:屏幕的有效高度 screen.availWidth:屏幕的有效宽度 二.History对象 History对象可以

javascript基础学习(五)

javascript之函数 学习要点: 函数的介绍 函数的参数 函数的属性和方法 系统函数 一.函数的介绍 1.函数就是一段javascript代码.可以分为用户自定义函数和系统函数.   如果一个函数是javascript内置的函数,就称为系统函数.如果函数是自己编写的函数,就是自定义函数. 2.在javascript用function来定义一个函数.function 函数名(参数1,参数2,...){<语句块>  return 返回值} (PS:return语句可以省略) 3.函数的嵌套定