Comments (4)
基本包装类型
同时具有各自基本类型相应的特殊行为。**每当读取一个基本类型值得时候,后台就会创建一个对应的_基本包装类型_的对象**。
**引用类型与基本包装类型的主要区别就是对象的生存期!应用类型**
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对象或字符串,第二个参数字符串或函数(模式的匹配项,匹配模式在字符串中的位置,原始字符串)
//特殊字符序列 $$ =>
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 "<";
case ">":
return ">";
case "&":
return "&";
case "\"":
return """;
}
})
};
console.log(htmlE(" < p class = \"greeting\">Hellow world!"))
//<p class="greeting">Hellow 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.
面向对象的程序设计
对象
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.
创建对象
一、工厂模式
抽象了创建具体函数的过程;
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.
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)
- css 样式问题 HOT 7
- js HOT 23
- CSS HOT 4
- TCP/IP HOT 1
- Web高效编程与优化
- serializeArr 转为 serializeJson
- 关于重构 HOT 1
- 从浏览器输入网址到页面展示完成发生了什么
- Echarts HOT 1
- layui 使用遇到的问题 HOT 3
- 多文件上传 jquery.MultiFile
- 常用正则 HOT 1
- 隐藏 表单记录 多选框选中
- node 相关
- js 判断浏览器类型以及语言
- GIT HOT 2
- 工具使用
- 设计模式
- 微信小程序 HOT 15
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from alexuse.