Javascript 初学笔记
变量作用域
自 ES2015 起,JS 引入let
和 const
关键词定义变量的块作用域(Block Scope)。
var
仅支持全局作用域(Global Scope)和函数作用域(Function Scope);
let
支持块作用域,即严格定义作用域在花括号{}
里面;
counst
不仅支持块作用域,且定义的变量无法再修改。
var i = 5;
for (var i = 0; i < 10; i++) {
// some statements
}
// Here i is 10
let i = 5;
for (let i = 0; i < 10; i++) {
// some statements
}
// Here i is 5
循环操作
for
循环
C 风格
for (let i = 0; i < arr.length; i++) {
// do iteration
}
JS 风格
for (let val of arr) {
// loop over values of array
}
for (let key in obj) {
// loop over keys of object
}
对象(Object)
创建新对象的四种方式
Object Initializer
let brother = {
name: 'Alex',
age: 25,
sayHello: function () {
return 'Hello!' + 'my name is' + this.name;
}
}
Constructor function
function Person (name, age, gender) {
this.name = name;
this.gender = gender;
this.age = age;
sayHello: function () {
return 'Hello!' + 'my name is' + this.name;
}
}
let brother = new Person('Alex', 25, 'male');
Object Constructor
let brother = new Object({
name: 'Alex',
gender: 'male'
age: 25,
sayHello: function () {
return 'Hello!' + 'my name is' + this.name;
}
})
Object.create()
method
let brother = {
name: 'Alex',
gender: 'male'
age: 25,
sayHello: function () {
return 'Hello!' + 'my name is' + this.name;
}
}
let sister = Object.create(brother);
sister.name = 'Alice';
sister.gender = 'female'
补充:
sister = Object.create(brother)
在这里实际上是以 brother 作为原型构建的,亦即:
sister.__proto__ === brother
将返回 true
。
对象原型(Object Prototype)
我们刚刚创建的brother
对象的 constructor 是 Person()
,而 Person()
的原型是 Object()
。如果我们运行:
brother.valueOf();
将列出 brother
中所有的属性和方法。但是,Person()
中并没有 valueOf()
方法,因此可以看出实际上 Person()
实际上继承了 Object()
中的方法 valueOf()
。
访问对象原型
目前主流浏览器都支持:
brother.__proto__;
自 ECMAScript 2015 开始,也可以:
Object.getPrototypeOf(brother);
可继承成员
每个对象都有个属性 prototype
, 例如 Object.prototype
,Person.prototype
。
Object.prototype
本身是一个对象,里面是 Object
的所有可继承成员。换句话说,prototype
里面不包含的成员是无法继承的。
修改原型
增加属性
我们可以直接给对象 bother
添加属性
brother.education = 'Bachelor of Computer Science';
也可以给对象原型 Person
添加属性
Person.prototype.nationality = 'Chinese'
增加方法
我们可以直接给对象 bother
添加方法
brother.coding = function(){
return '0 warning(s), 0 error(s)';
};
也可以给对象原型 Person
添加属性
Person.prototype.play = function(){
return 'Happy';
};
原型继承(Prototype Inheritance)
现在,假设我们想从 Person
构建一个 Student
子类。
Constructor function
首先需要构造函数(constructor function):
function Student(name, age, gender, degree) {
Person.call(this, name, age, gender);
this.degree = 'Undergraduate';
}
Prototype & Constructor Reference
此时,构造函数 Student()
的原型属性(prototype property)Student.prototype
并不具有 Person
里带有的方法, 因此还需要继承 Person
的方法。
例如, sayHello()
是Person
的方法,却不在 Student.prototype
中。
修改原型
Student.prototype = Object.create(Person.prototype)
以 Person.prototype
为原型构建对象并赋给 Student.prototype
就可以继承到 Person
的方法了。
恢复构造函数
但仅仅这样会造成另一个问题。由于 Student.prototype === Person.prototype
,造成了 Student.prototype.constructor === Person.prototype.constructor
。因此需要将 Student
的构造函数恢复成 Student
而不是 Person
。
Student.prototype.constructor = Student
这样,继承就完成了。
Pipeline
const pipe = (f1, f2) => {
return (arg) => {
const result1 = f1(arg);
return f2(result1);
}
}
let timesTwo = (a) => a*2;
let timesThree = (a) => a*3;
const pipeline = pipe(timesTwo, timesThree);
console.log(`$6 x 2 x 3 = ${pipeline(6)}`);
JS String
字符串转数字
Number(string);
parseInt(string);
parseFloat(string);
字符串截取
string.charAt(index);
string.indexOf("foo");
string.lastIndexOf("foo")
string.match("pattern");
string.replace(/regex/, "foo");
string.slice(start, end);
string.substring(start, end);
string.substr(start, length);
字符串转数字
let number = Number(string);
let intNum = parseInt(string);
let floatNum = parseFloat(string);
Written with StackEdit.
Javascript 初学笔记的更多相关文章
- javascript初学笔记
基本语句 赋值条件循环语句 javascript异常处理语句 trycatchfinally语句 Error对象 throw语句 函数 定义 调用 嵌套函数 函数的嵌套定义 内置函数 匿名函数和Fun ...
- Javascript初学篇章_5(对象)
对象 Javascript是一种面向对象的语言,因此可以使用面向对象的思想来进行javascript程序设计对象就是由一些彼此相关的属性和方法集合在一起而构成的一个数据实体.举个例子,一只猫是个对象, ...
- C++ STL初学笔记
C++ STL初学笔记 更系统的版本见徐本柱的PPT set 在这儿:http://www.cnblogs.com/pdev/p/4035020.html #include <vector&g ...
- JavaScript基础笔记二
一.函数返回值1.什么是函数返回值 函数的执行结果2. 可以没有return // 没有return或者return后面为空则会返回undefined3.一个函数应该只返回一种类型的值 二.可变 ...
- JavaScript基础笔记一
一.真假判断 真的:true.非零数字.非空字符串.非空对象 假的:false.数字零.空字符串.空对象.undefined 例: if(0){ alert(1) }else{ alert(2) } ...
- Java程序猿的JavaScript学习笔记(汇总文件夹)
最终完结了,历时半个月. 内容包含: JavaScript面向对象特性分析,JavaScript高手必经之路. jQuery源代码级解析. jQuery EasyUI源代码级解析. Java程序猿的J ...
- javascript - 工作笔记 (事件四)
在javascript - 工作笔记 (事件绑定二)篇中,我将事件的方法做了简单的包装, JavaScript Code 12345 yx.bind(item, "click&quo ...
- Java程序猿的JavaScript学习笔记(8——jQuery选择器)
计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...
- Java程序猿JavaScript学习笔记(2——复制和继承财产)
计划和完成在这个例子中,音符的以下序列: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaSc ...
随机推荐
- IIS中ASP.NET虚拟目录不继承主站点web.config设置的办法(转载)
ASP.NET提供了强大的Web.config来配置网站,一般来说一个网站只有一个根目录下的Web.config文件,有时候我们希望子目录有着不同的权限或者参数设置,则可以在相应子目录增加一个Web. ...
- Oracle Enterprise Linux 64-bit 下Oracle11g的监听配置改动及測试步骤
測试环境:Oracle Enterprise Linux 64-bit (5.8版本号) + Oracle 11g 64位 相关说明: Oracle11g64位软件的安装位置为/u01/app/ora ...
- cocos2d-x3.0 用CCDictionary写文件
bool CDownLoad_LocalData::WriteToConfigFile( DownLoadLocalData* downdata ){ CCDictionary* pDict = CC ...
- Oracle条件查询
Oracle条件查询 参考网址:http://www.oraclejsq.com/article/010100259.html Oracle条件查询时经常使用=.IN.LIKE.BETWEEN...A ...
- MySQL Workbench 6.3CE 菜单汉化 xml
找了很多 CSDN都要积分 直接自己搞了个 MySQL8.0亲测可以 https://pan.baidu.com/s/1Mwbye2tUj2u3RMdR_oW7rQ
- python使用tablib库生成xls表格
参考文档:http://python-tablib.org Tablib是一个MIT许可的格式不可知的表格数据集库.它允许您导入,导出和操作表格数据集.高级功能包括隔离,动态列,标签和过滤,以及无缝格 ...
- TensorFlow的前世和今生
TensorFlow的前世和今生 TensorFlow是一个开放源码的软件库,用于跨一系列任务的数据流处理编程.TensorFlow是一个符号化的数学应用库,广泛用于机器学习,例如神经网络.在谷歌公司 ...
- Linux系统初学-第二课 linux基础知识
一.用户与群组 Linux是多人多任务的操作系统,每个用户有一个主目录(或者叫家目录 /home),其他用户可以浏览,但是能否查看文件要看具体的权限设置.文件拥有者可以修改权限,选择是否允许其他用户进 ...
- 偏前端-纯css,手写轮播-(焦点切换 和 自动轮播 只可选择一种,两者不可共存)
现在我们一般都是在网上找个轮播插件,各种功能应有尽有,是吧!!~大家似乎已经生疏了手写是什么感觉.万一哪天想不起来,人家要手写,就尴尬了!~~跟我一起复习一下吧 不多说:效果图看一下: 高度不能是固定 ...
- 如何创建一个新的vue项目
一.cnpm安装 1.百度node官网,进入官网下载安装包安装好node环境 2.成功后打开cmd命令行工具,执行node-v命令,查看node版本号,如果能输出版本号说明安装成功 3.推荐使用淘宝 ...