您的位置:首页 > Web前端 > JavaScript

Javascript 学习记录

2015-12-02 06:47 281 查看
不要使用传统语言(C#,JAVA)的面向对象理念去理解JS, 在ES5中没有类这个概念,虽然也有new操作符, 但完全可以不去用, function在js中是一等公民, 可以用function去做任何事情, 当然也包括创建对象,js中的编程风格是函数式编程, 在js中不需要通过new去创建对象, 这样看上去也比较奇怪,也不利于理解JS.当创建一个新对象时, 只需要说让这个新对象看上去像某个对象就OK了, 这个就是原型, 新对象是以某个对象为原型创建的, 所以新对象拥有原型对象(看上去像的对象)特征.
那应该怎么去创建对象呢.有一种最简单的方式,对象字面量, var o = {};没错就这么简单. 刚才说一个对象要像另外一个对象那这个对象像谁呢? 没错当创建一个对象的时候这对象一定会有一个参考对象(或者叫蓝本), 这个对象(o)就是参考Object创建的, Object是js中所有对象的始祖
JS中的对象按创建方式分为两种 : 一种是 函数对象, 一种是 通过函数对象创建的对象

"use strict" 开启ES5的严格模式

javascript是unicode字符集编写的, 所以天生支持unicoude, unicode转意符以\u开头,后面接4个16进制数(\u00e9)

javascript区分大小写

javascript中空格是被忽略的,可以在程序的标识之间使用任意数量的空格. 换行, 分号在不引起歧义的情况下也会被忽略掉

数据类型
javascript不是强类型语言,所以在给变量赋值的时候不需要指明变量的具体类型,根据其上下文的环境自动判断数据类型
数字(number), 字符串(string), 布尔(boolean),对象(object). 前面三个是原始类型, 最后一个是对象类型, null, defined, NaN, Infinity这些是js中的特殊值
js中的浮点数使用的是二进制表示法(IEEE-754), 该表示法, 可以精确的表示二进制分数1/2, 1/8, 1/1024,但对于我们日常使用的十进制分数无法准确的表示

0.2-0.1=0.1
0.3-0.2=0.09999999999999998
0.4-0.3=0.10000000000000003
0.5-0.4=0.09999999999999998


对于这样的问题我们可以通过.toFixed(n)四舍五入来解决, n=0-20包括0,20
3种原始类型也可以属性,原因是javascript也有"装箱"和"拆箱"的过程,所以这3种类型虽然可以使用对应对象的相关属性,但类型却不是对象

数字类型
javascript中不分整型和浮点,一律使用浮点类型, 范围是253~2-53,但数组索引和位运算则是基于32位整数.一些复杂的算数运算我们可以通过Math来完成.

布尔类型
布尔值主要用于关系判断,js中的所有类型在进行关系判断的时候都会进行类型转换
undefine, null, NaN, 0, -0, ""(空字符串) 这些类型会被转换为false, 除此以外其他的值都会被转换成true.
用于关系判断的运算符有: ==(等于), ===(严格相等), !=(不等于), !==(不严格相等), >(大于), <(小于), >=(大于等于), <=(小于等于), in运算符, instanceof运算符

Date是javascript的内置对象,我们通过new Date来创建日期对象

var d = new Date(); //用当前的时间创建一个日期对象
var d = new Date(2015,0,1);//表示2015-01-01, javascript是从0开始计算月份的
var s = new Date(2015,0,1,0,0,0);//开始时间
var d = new Date(2015,0,1,0,0,1);//开始时间
d-s=1000;//时间间隔用毫秒表示
d.getYear(); //当前年份-1900的值
d.getFullYear();//获取年份
d.getMonth();//获取月份, 从0开始计算, 12月得到的是11
d.getDate();//获取天数, 从1开始计算
d.getDay();//获取星期数,从0开始计算,星期天用0表示,国外的习惯是星期天是一个星期的开始
d.getHours();//获取小时数(0-23), 如果写24会自动转换成第二天的0时(webkite下面测试)
d.getMinutes();//获取分钟数(0-59)
d.getSeconds();//获取当前秒数(0-59)


数据类型的转换
javascript的原始类型就3种,数字,字符,布尔类型. 这三种类型之间的转换比较简单,
(数字, 布尔)-->(字符串):数字转换成字符串是把数字表示的值直接转换成字符串形式, 布尔转换成字符串是 "false" 和 "true",
(数字, 字符串)-->(布尔):空字符串("",引号之间没有空格), 0 和 -0 转换成布尔为假值(false), 其他的数字和字符串都转换成真值(true),
(字符串, 布尔)-->(数字):所有以数字表示的字符串("12", "22")可以直接转换成对应的数字, 字符串中的开始和结束的空格会被忽略调, 对于非空,非数字开头的字符串会被转换成NaN

强制类型转换
parseInt, parseFloat, Boolean, Number, String后3个是内置对象的构造函数

根据上下文环境发生的类型转换
23+"string" ==> 转换成字符串
"4"*"3" ==> 转换成数字

全局对象
当javascript解释器启动的时候会创建一个全局对象, 并给全局对象初始化一些特定的属性

Object.prototype.hasOwnProperty
该API用于判断当前对象是否包含某个自身属性, 所谓自身属性是指非继承的属性, 该API可以区分那些属性是继承的属性那些是自身的属性, 自身的属性会返回true, 继承的属性返回false

Object.prototype.isPrototypeOf
该API用于判断一个对象是否在另一个对象的原型链上

function Fee() {
// . . .
}

function Fi() {
// . . .
}
Fi.prototype = new Fee();

function Fo() {
// . . .
}
Fo.prototype = new Fi();

function Fum() {
// . . .
}
Fum.prototype = new Fo();
var fum = new Fum();
. . .

if (Fi.prototype.isPrototypeOf(fum)) {
// ...
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: