Coder Social home page Coder Social logo

js高级(第三版) about alexuse HOT 4 OPEN

geqianqian-shihan avatar geqianqian-shihan commented on July 22, 2024
js高级(第三版)

from alexuse.

Comments (4)

geqianqian-shihan avatar geqianqian-shihan commented on July 22, 2024

基本包装类型

同时具有各自基本类型相应的特殊行为。**每当读取一个基本类型值得时候,后台就会创建一个对应的_基本包装类型_的对象**。
**引用类型与基本包装类型的主要区别就是对象的生存期!应用类型**
var s1 = "some text";
var s2 = s1.substring(2);
/*
*第二行代码访问过程处于读取模式。后台自动完成(适用于Boolean,Number):
*1、创建String对象的一个实例;
*2、在实例上调用指定的方法;
*3、销毁实例。
*/

使用new调用基本包装类型的构造函数,与直接调用同名的转型函数是不一样的;

var value = "25";
var number = Number(value);    //转型函数
console.log(typeOf number);    //"number"

//构造函数根据传入的值得类型返回相应的基本包装类型的实例;
var obj = new Number(value);  //构造函数
console.log(typeOf obj);     //"object"
console.log(obj instanceof Number);     // true

Boolean
基本类型与引用类型的布尔值:1、typeof 操作符对基本类型返回 boolean,对引用类型返回object;2、Boolean对象是Boolean类型的实例,所以instanceof 返回true。

var falseObj = new Boolean(false);
console.log(falseObj && true);     //true
    //布尔表达式中的所有对象都会被转换为true;
var falseValue = false;
console.log(falseValue && true);    //false
console.log(typeof falseObj);    //object
console.log(typeof  falseValue);    //boolean
console.log(falseObj instanceof Boolean);    //true
console.log(falseValue instanceof Boolean);    //false

Number
toFixed() 按照指定小数位返回数值的字符串表示;
//传入0 时,IE8及之前不能正确舍入{(-0.94,-0.5],[0.5,0.94)}之间的值,均会返回0;
toExponential()指数表示法,参数指定小数位数
toPrecision()得到表示某个值最合适的格式。

String

  • 字符操作:

charAt():输出字符
charCodeAt():输出字符编码
方括号加数字索引://IE7及更早版本返回undefined;

  • 字符串操作:

concat() :字符串拼接,返回新的字符串;原字符串不变;接受任意参数
//基于子字符串创建新字符串,参数:字符串开始位置,字符串结束位置/个数(负值时,将负值与长长度相加/0);原字符串不变;
slice()
substr() //第二个参数 返回字符串个数,负值时为0
substring() //第二个值为负数时,负数转换为0,较小参数为起始位置。

  • 字符串位置操作

搜索指定字符串,没有则返回-1;第二个参数,查找起始位置;
indexOf
lastIndexOf

  • trim()

创建一个字符串的副本,删除前置及后缀的所有空格,(trimLeft() / trimRight()高级浏览器)

  • 字符串大小写转换

toLowerCase(),toLocalLowerCase(),toUpperCase(),toLocalUpperCase()

  • 字符串模式匹配

match() //RegExp的exec,参数正则表达式或RegExp对象
search() //返回字符串中第一个匹配项的索引,否则-1;
replace() //RegExp对象或字符串,第二个参数字符串或函数(模式的匹配项,匹配模式在字符串中的位置,原始字符串)
//特殊字符序列 $$ => $,$& =>整个模式子字符串,$'=>子字符串之前,$`=>子字符串之后,$n=>第n个捕获的子字符串,$nn=>第nn个捕获字符串

var text = "cat bat sat fat";
var result = text.replace(/(.at)/g,"world($1)");
console.log(result);
//world(cat) world(bat) world(sat) world(fat)

function htmlE(text) {
    return text.replace(/[<>"&]/g, function(match, pos, originalText) {
	switch(match) {
	    case "<":
		return "&lt";
	    case ">":
		return "&gt";
	    case "&":
		return "&amp";
	    case "\"":  
		return "&quot";
	}
    })
};
console.log(htmlE(" < p class = \"greeting\">Hellow world!"))
//&ltp class=&quotgreeting&quot&gtHellow world!

split() //基于指定分割符将字符串分割成多个字符串,并保存在一个数组中。参数为字符串或RegExp对象。

localCompare() 比较两个字符串,在字母表中,在参数前则为负数;相同为0,在后为正数

单体内置对象

Global()

不属于任何其他对象的属性方法,都是它的属性方法。
1、URL编码方法:encodeURI()主要用于整个URI,encodeURIComponent()主要用于URI中某一段。decodeURI (),decodeURIComponent()

encodeURL不会对属于URI的(冒号,正斜杠,问号,井字号)特殊字符进行编码
2、eval()
当解析器发现代码中有eval() 方法时,它会将传入的参数当做实际的ECMAScript语句来解析。然后把执行结果插入到原位置。通过eval 执行的代码被认为是包含此次调用环境的一部分。因此被执行代码具有与该执行环境想同的作用域链。eval() 执行的代码可以引用在包含环境中定义的变量。

eval("function sayHi(){console.log('hi!')}");
sayHi();    //"hi!"

console.log(window.sayHi)
   // sayHi(){console.log('hi!')}

严格模式下访问不到eval()中创建的任何变量或函数。

3、在全局作用域中声明的所有变量和函数,就都成为了window对象的属性。

Math()

min() / max() 接受任意数量的参数。经常用于避免多余的循环和在 if 语句中确定一组数的最大值。

var value = [1,2,3,4,5,6,7,8];
var max = Math.max.apply(Math , value);    //max
    //把 Math 作为 apply 的第一个参数,确定正确的this。

Math.ceil() 向上舍入;
Math.floor() 向下舍入;
Math.round() 标准舍入;

4、random()
Math.random() 返回大于0 小于1 的一个随机数。

//利用Math.random()从某个整数范围内随机选择一个值。
//值 = Math.floor(Math.random() * 可能值得总数 + 第一个可能的值)
var num = Math.floor(Math.random() * 9 + 2);  //2到10 之间的整数

5、常用方法
Math.abs(num); num的绝对值
Math.exp(num); num的Math.E 的 num次幂
Math.log(num); num的自然对数
Math.pow(num,power); num的power次幂
Math.sqrt(num); num的平方根
Math.acos(num); num的反余弦值
Math.asin(num); num的正余弦值
Math.atan(num); num的反正切值
Math.atan2(y,x); y/x的反正切值
Math.cos(num); num的余弦值
Math.sin(num); num的正弦值
Math.tan(num); num的正切值

from alexuse.

geqianqian-shihan avatar geqianqian-shihan commented on July 22, 2024

面向对象的程序设计

对象

ECMA-262 对象:无序属性的集合,其属性可以包含基本值,对象或函数。类似散列表,一组键值对。每个对象都是基于引用类型创建的。

对象的字面量语法:

var person = {
    "name": "alex",
    "age": 12,
    sayName: function(){
        console.log(this.name);
    }
}
  • 属性
    数据属性和访问器属性
    1.数据属性包含一个数据的位置。可以读写。四个特性:

    [[Configurable]] 是否通过 delete 删除属性,默认true
    [[Enumberable]] 是否通过 for - in 循环返回属性,默认true
    [[Writeable]] 是否能够修改属性的值,默认true
    [[Value]] 属性的数据值,默认undefined
    修改属性的特性 使用Object.defineProperty(属性所在对象,属性名字,描述符对象(上面列举的));

    属性值不可修改时,再赋值,非严格模式,忽略赋值语句,严格模式报错。
    Configurable 为 false 除设置 Writeable 其他均报错。
    2.访问器属性不包含数据值:包含一对儿getter()和setter()函数;四个特性:

    [[Configurable]] 是否通过 delete 删除属性,默认true
    [[Enumberable]] 是否通过 for - in 循环返回属性,默认true
    [[get]] 读取属性时调用,默认undefined
    [[set]] 设置属性时调用,默认undefined
    访问器属性不可直接定义,使用Object.defineProperty()定义。

    // _year前面的下划线是一种常用记号,用于表示只能通过对象方法访问的属性。
    //使用访问器属性的常见方式:设置一个属性的值会导致其他属性发生变化。
var book = {
    _year: 2004,
    edition: 1
};
Object.defineProperty(book,"year",{
    get: function(){
        return this._year;
   },
    set: function(newValue){
        if(newValue > 2004){
            this._year = newValue;
            this.edition += newValue - 2004;
        }
    }
});
book.year = 2005;
console.log(book.edition);

// 定义访问器的旧方法:
book.__defineGetter__("year",function(){
    return this._year;
});
book.__defineSetter__("year",function(newValue){
    if(newValue > 2004){
        this._year = newValue;
        this.edition += newValue - 2004;
    }
})

严格模式下不可以只getter 或只 setter,非严格模式下,只getter,写会被忽略,只setter,读返回undefined;

  • 定义多个属性
    Object.defineProperties(要操作的对象,要添加的属性方法json,一一对应);
var book = {};
Object.defineProperties(book,{
    _year:{
        writable: true,
        value: 2004
    },
    edition:{
        writable: true,
        value: 1
    },
    year: {
	get: function() {
		return this._year;
	},
	set: function(newValue) {
		if(newValue > 2004) {
			this._year = newValue;
			this.edition += newValue - 2004;
		}
	}
    }
});
book.year = 2005;
console.log(book.edition);

读取属性的特性:Object.getOwnPropertyDescriptor(属性所在对象,要读取其描述符的返回值(返回对象))。 (访问器属性 / 数据属性);

from alexuse.

geqianqian-shihan avatar geqianqian-shihan commented on July 22, 2024

创建对象

一、工厂模式
抽象了创建具体函数的过程;

function creat(name,age,job){
  var  o = new Object();
  o.name = name;
  o.age = age;
  o.job = job;
  o.sayName = function(){
    console.log(this.name);
  }
  return o;
}
let person1 = cerat("alex","12","doctor");

解决了创建多个相似对象的问题,但是无法解决对象识别问题

二、构造函数

function creat(name,age,job){
  this.name = name;
  this.age = age;
  this.job = job;
 this.sayName = function(){
    console.log(this.name);
  };
}
let person1 = new cerat("alex","12","doctor");
// constructor (构造函数)属性,该属性指向creat;instance 更可靠;
// new 操作符,1)创建对象,2)将构造函数的作用域指向这个心对象,3)执行构造函数代码,4)返回新对象;

1、没有显式的创建对象;
2、直接将属性和方法赋值给 this 对象;
3、没有return语句;

1、构造函数及函数唯一区别,调用方式不同;通过new 调用则为构造函数,否则为普通函数;
2、缺点:每个方法都在每个实例上重新创建一遍;单数不同实例上的同名函数是不相等的。可以通过将函数定义放到构造函数外,解决两个函数做同一件事。有this 对象在 不需要在执行代码前就把函数绑定到特定对象上;

三、原型模式
每一个函数都有一个prototype(原型)属性,这是一个指针,指向一个对象(包含可以由特定类型的所有实例共享的属性和方法)。
检测原型:

console.log(Person.prototype.isPrototypeOf(person1));
console.log(Object.getPrototype(person1) == Person.prototype);  //true

from alexuse.

geqianqian-shihan avatar geqianqian-shihan commented on July 22, 2024

BOM

BOM提供了很多对象,用于访问浏览器的功能,这些功能与网页内容无关。

一、window 对象

一个浏览器的实例,既是通过 javascript 访问浏览器窗口的接口,又是 ECMAscript 规定的 Global 对象。网页中定义的任何一个对象、变量、函数,都以 window 作为 Global 对象。全局作用域中声明的变量、函数都会变成 window 对象的属性和方法。
全局变量不能通过 delete 操作符删除,直接定义在 window 对象上的属性可以。

var age = 25;
window.color = "red";

delete window.age;    // IE < 9 时抛出错误,其他浏览器返回false;

delete window.color;    //IE < 9 时抛出错误,其他浏览器返回true;

console.log(window.age);    //25
console.log(window.color);    //undefined

from alexuse.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.