JavaScript学习笔记

1、javascript的发展历程

有三个版本的javascript:一是网景公司的JavaScript、二是IE中的JScript、三是CEnvi的ScriptEase。最后ECMA实现了标准化ECMA-262,作为各大浏览器JavaScript实现的基础。

2、Javascript的组成

ECMAScript

DOM(文档对象模型)

BOM(浏览器对象模型)

3、变量可以存放的两种类型,使用哪种存储结构进行存储

原始值——存储在栈中的简单数据段,它们的值存放在变量直接访问的位置

引用值——存储在堆中的对象,存储在变量处的值是一个指针,指向存储对象的内存处

4、原始类型和引用类型分别有哪些,各自使用typeof的返回值是什么?

原始类型——string、number、boolean、undefined、null

引用类型——array、object、function(function也是对象)

typeofresult
stringstring
number   number
booleanboolean
undefinedundefined   
nullobject
object
functionfunction

5、什么时候会有undefined值?undefined的值有什么特性?

  • 声明的变量未初始化
  • 未定义的变量
  • 当函数无返回值时,返回的值也是undefined

值为undefined的变量不能使用运算符

6、什么时候会有null值?null值有什么特性?

值undefined实际是从null派生而来的,从而

console.log(null == undefined); // 输出true

7、number有什么特殊值?用于判别特殊值的方法有哪些?

Number.MAX_VALUE、Number.MIN_VALUE、大于最大值为Number.POSITIVE_INFINITY(Infinity)、大于最小值为Number.NEGATIVE_INFINITY(-infinity)、NaN(非数字)

isFinit():判断是否为有穷数

isNaN():判断是否是数字

8、强制类型转换为Boolean类型,哪些为false?

空字符串、+0和-0和NaN、undefined、null、false

9、强制类型转换为Number类型,有哪些特殊例子?

var num1 = Number(false);
var num2 = Number(true);
var num3 = Number(undefined);
var num4 = Number(null);

console.log(num1); // 0
console.log(num2); // 1
console.log(num3); // NaN
console.log(num4); // 0

10、解释一下原型

假若现在有一个对象a,b是a的一个对象实例,那么原型指的是对象a中用于实例b进行初始化的属性或方法。在javascript中,a的这些属性存放在a.prototype里面,可以通过a.prototype.你要定义的属性来进行原型编辑,b实例的一个私有属性__proto__是用来存放a.prototype里面的原型备份。当b实例进行a对象里面的属性或者方法调用时,先检查b实例是否存在该属性或方法,若不存在,则在__proto__里面进行查找。这种机制是ECMAScript实现的。

11、为什么少使用Boolean类?

Boolean类是boolean原始类型的引用类型,若使用Boolean对象进行逻辑运算,对象会自动转换为true。可以使用valueOf()返回原始值,如下:

var bflag1 = new Boolean(false);
console.log(bflag1 && true);  // true

var bflag1 = new Boolean(false);
console.log((bflag1.valueOf()) && true); // false

12、slice()和substring()方法有什么不同?

正数参数两个方法一样,第一个参数是起始位置,第二个参数是终止位置。

负数参数,slice()会用字符串的长度加上参数,substring()会视之为0。例如:

var str = '01234567';
console.log(str.slice(-2)); // 67
console.log(str.substring(-2));  // 01234567

console.log(str.slice(2,-2));  // 2345
console.log(str.substring(2,-2)); //01

13、this的用法

若使用对象.函数()这样调用函数,对象中的函数的this指代对象本身

// 例子1
var obj = {
	color : 'blue',
	showColor : function() {
		return this.color;  // 这里的this指代obj
	}
};

console.log(obj.showColor());  // blue
  • 顶层函数里面的this  
  • 对象的函数里面的函数的this

指代的是global(在浏览器的宿主环境中,取而代之的是window)

// 例子2
function getColor() {
	console.log(this == global); // true
}

getColor();

// 例子3
global.color = 'red';

var obj = {
	color : 'blue',
	showColor : function() {
		var getColor = function() {
			console.log(global == this); // true
			return this.color; // this指代global
		}
		return getColor();
	}
};

console.log(obj.showColor());  // red

在全局定义的this

  • 指代module.exports(nodejs)
  • 指代window(浏览器)
// 例子4
this.num = 123;

console.log(module.exports.num); // 123

在构造函数中this指向的是它的实例

// 例子5
function Fn(){
    this.num = 998;
}
var fn = new Fn();
console.log(fn.num); //998

14、运算符有哪些

一元运算符:delete、void、自增/自减、正负号

位运算符:NOT(用~表示,运算是对数字求负,然后减1)、AND、OR、XOR(用^表示,异或)、左移(后边补0)、有符号右移(左边补符号位)、无符号右移(左边补0)

逻辑运算符:NOT、AND、OR

算术运算符:+、-、*、/、%

关系运算符:<、>、<=、>=、==、===、!=、!==(等和全等差别在于是否进行前置类型转换)

三元运算符(条件运算符): condition ? true_value : false_value

赋值运算符:=、*=、+=、-=、/=、%=、<<=、>>=、>>>=

逗号运算符:,

15、闭包

当一个内部函数被其外部函数之外的变量引用时,就形成了一个闭包。

有一句话说得好:在 Javascript 中,如果一个对象不再被引用,那么这个对象就会被 GC 回收,否则这个对象一直会保存在内存中。有以下例子:

function A() {
	var count = 0;

	function B() {
		count ++;
		console.log(count);
	}

	return B;
}

var C = A();
C(); // 1
C(); // 2
C(); // 3

闭包的用途:当我们需要在模块中定义一些变量,并希望这些变量一直保存在内存中但又不会 “污染” 全局的变量时,就可以用闭包来定义这个模块。下面是闭包的高级写法:

(function (document) {
    var viewport;
    var obj = {
        init: function(id) {
           viewport = document.querySelector('#' + id);
        },
        addChild: function(child) {
            viewport.appendChild(child);
        },
        removeChild: function(child) {
            viewport.removeChild(child);
        }
    }
    window.jView = obj;
})(document);

16、javascript中怎样实现对象废除

把对象的引用都设置为null

17、对象类型有哪几种

(独立于宿主环境的、ECMA-262定义的类)本地对象:Boolean、Number、String、Object、Array、Function、Date、RegExp和其他Error

内置对象:Global

宿主对象:DOM、BOM

D18、怎样声明和初始化数组

使用引用类型

// 方法1
var array = new Array()
array[0] = 'red';
array[1] = 'blue';
array[2] = 'green';
// 方法2
var array = new Array('red', 'blue', 'green');

使用隐式声明

// 方法3
var array = ['red', 'blue', 'green'];

19、数组和字符串的互相转化

数组转化为字符串

var array = ['red', 'blue', 'green'];
console.log(array.toString()); // red,blue,green
console.log(array.valueOf()); // [ 'red', 'blue', 'green' ]
console.log(array.join(' | ')); // red | blue | green

字符串转化为数组

var str = 'red,blue,green';
var array  = str.split(',');
console.log(array); // [ 'red', 'blue', 'green' ]

20、数组怎么实现队列

var array = ['red', 'blue', 'green'];

// 入队
var enqueue = function() {
	console.log('grey入队');
	array.push('grey')
}

// 出队
var dequeue = function() {
	var red = array.shift();
	console.log('red出队');
}

enqueue();
dequeue();
console.log(array.valueOf());

21、Date的常用方法

var d = new Date(); // 现在是2019/3/4

console.log(d.getTime()); // 1551696951664
console.log(d.getFullYear()); // 2019
console.log(d.getMonth()); // 2
console.log(d.getDate());
console.log(d.getDay());
console.log(d.getHours());
console.log(d.getMinutes());
console.log(d.getSeconds());

 

转载于:https://my.oschina.net/u/3960535/blog/3017358

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值