1、廖雪峰老师js的一个小题
脑洞大开
很久很久以前,有个叫阿隆佐·邱奇的帅哥,发现只需要用函数,就可以用计算机实现运算,而不需要0、1、2、3这些数字和+、-、*、/这些符号。
JavaScript支持函数,所以可以用JavaScript用函数来写这些计算。来试试:
'use strict';
// 定义数字0:
var zero = function (f) {
return function (x) {
return x;
}
};
// 定义数字1:
var one = function (f) {
return function (x) {
return f(x);
}
};
// 定义加法:
function add(n, m) {
return function (f) {
return function (x) {
return m(f)(n(f)(x));
}
}
}
// 计算数字2 = 1 + 1:
var two = add(one, one);
// 计算数字3 = 1 + 2:
var three = add(one, two);
// 计算数字5 = 2 + 3:
var five = add(two, three);
// 你说它是3就是3,你说它是5就是5,你怎么证明?
// 呵呵,看这里:
// 给3传一个函数,会打印3次:
(three(function () {
console.log('print 3 times');
}))();
// 给5传一个函数,会打印5次:
(five(function () {
console.log('print 5 times');
}))();
print 3 times
print 3 times
print 3 times
print 5 times
print 5 times
print 5 times
print 5 times
print 5 times
2、练习
请使用箭头函数简化排序时传入的函数:
'use strict'
var arr = [10, 20, 1, 2];
arr.sort((x, y) => {
if(x<y) return -1;
if(x>y) return 1;
return 0;
});
console.log(arr); // [1, 2, 10, 20]
// 2
'use strict'
var arr = [10, 20, 1, 2];
arr.sort((x, y) => x-y)
console.log(arr); // [1, 2, 10, 20]
3、一些应该注意的方法
-
不要使用new Number()、new Boolean()、new String()创建包装对象;
-
用parseInt()或parseFloat()来转换任意类型到number;
-
用String()来转换任意类型到string,或者直接调用某个对象的toString()方法;
-
通常不必把任意类型转换为boolean再判断,因为可以直接写if (myVar) {...};
-
typeof操作符可以判断出number、boolean、string、function和undefined;
-
判断Array要使用Array.isArray(arr);
-
判断null请使用myVar === null;
-
判断某个全局变量是否存在用typeof window.myVar === 'undefined';
-
函数内部判断某个变量是否存在用typeof myVar === 'undefined'。
-
任何对象都有toString()方法吗?null和undefined就没有!确实如此,这两个特殊值要除外,虽然null还伪装成了object类型。
-
number对象调用toString()报SyntaxError报错:
123.toString(); // SyntaxError
// 遇到这种情况,要特殊处理一下:
123..toString(); // '123', 注意是两个点!
(123).toString(); // '123'
4、如何改变一个对象的原型
在编写JavaScript代码时,不要直接用obj._proto_去改变一个对象的原型,并且,低版本的IE也无法使用_proto_。
Object.create()方法可以传入一个原型对象,并创建一个基于该原型的新对象,但是新对象什么属性都没有,因此,我们可以编写一个函数来创建xiaoming:
// 原型对象:
var Student = {
name: 'Robot',
height: 1.2,
run: function () {
console.log(this.name + ' is running...');
}
};
function createStudent(name) {
// 基于Student原型创建一个新对象:
var s = Object.create(Student);
// 初始化新对象:
s.name = name;
return s;
}
var xiaoming = createStudent('小明');
xiaoming.run(); // 小明 is running...
xiaoming.__proto__ === Student; // true
5、navigator
navigator对象表示浏览器的信息,最常用的属性包括:
- navigator.appName:浏览器名称;
- navigator.appVersion:浏览器版本;
- navigator.language:浏览器设置的语言;
- navigator.platform:操作系统类型;
- navigator.userAgent:浏览器设定的User-Agent字符串。
网友评论