-
["1", "2", "3"].map(parseInt)
你实际上得到的应该是
[1, NaN, NaN]
因为parseInt
需要两个参数 (val, radix) 但map
传了 3 个 (element, index, array) -
[typeof null, null instanceof Object]
typeof
对原生非可调用对象会始终返回 "object" -
[ [3,2,1].reduce(Math.pow), [].reduce(Math.pow)] ]
根据规范: 在一个空数组上应用reduce会抛初始化错误的异常
TypeError
-
var val = 'smtg'; console.log('Value is ' + (val === 'smtg') ? 'Something' : 'Nothing');
它实际上会打印 '
Something
' 这个+
操作符的优先级实际上比三元操作符要高. -
var name = 'World!'; (function () { if (typeof name === 'undefined') { var name = 'Jack'; console.log('Goodbye ' + name); } else { console.log('Hello ' + name); } })();
var
声明的作用域在整个 function 中, 但并没有初始化 -
var END = Math.pow(2, 53); var START = END - 100; var count = 0; for (var i = START; i <= END; i++) { count++; } console.log(count);
这段代码会进入死循环, 2^53 是javascript中最大的数字, 2^53+1 与 2^53 等同, 因此
i
永远也不会比这个数大 -
var ary = [0,1,2]; ary[10] = 10; ary.filter(function(x) { return x === undefined;});
Array.prototype.filter
不会应用到缺少的元素上 -
var two = 0.2 var one = 0.1 var eight = 0.8 var six = 0.6 [two - one == one, eight - six == two]
JavaScript 没有精确的数字, 即便它看上去有时侯能正常工作
-
function showCase(value) { switch(value) { case 'A': console.log('Case A'); break; case 'B': console.log('Case B'); break; case undefined: console.log('undefined'); break; default: console.log('Do not know!'); } } showCase(new String('A'));
switch
使用===
来枚举,并且new String(x) !== x
-
function showCase2(value) { switch(value) { case 'A': console.log('Case A'); break; case 'B': console.log('Case B'); break; case undefined: console.log('undefined'); break; default: console.log('Do not know!'); } } showCase(String('A'));
String(x)
不会返回一个 object 但会返回一个 string, 例如typeof String(1) === "string"
-
function isOdd(num) { return num % 2 == 1; } function isEven(num) { return num % 2 == 0; } function isSane(num) { return isEven(num) || isOdd(num); } var values = [7, 4, '13', -9, Infinity]; values.map(isSane);
[true, true, true, true, true] [true, true, true, true, false] [true, true, true, false, false] [true, true, false, false, false]Infinity % 2
返回NaN
,-9 % 2
返回-1
-
parseInt(3, 8) parseInt(3, 2) parseInt(3, 0)
3
在2
进制中不存在, 很显然结果是NaN
, 但0
呢?parseInt
猜测你的意思是10
, 所有返回是3
. -
Array.isArray( Array.prototype )
Array.prototype
是一个Array
. -
var a = [0]; if ([0]) { console.log(a == true); } else { console.log("wut"); }
[0]
被认为是真的,但跟true
又不等同 -
[]==[]
==
很邪恶 -
'5' + 3 '5' - 3
Strings 知道怎么用
+
, 但是遇到-
会被转化为数字 -
1 + - + + + - + 1
很有意思吧?(我也不清楚)
-
var ary = Array(3); ary[0]=2 ary.map(function(elem) { return '1'; });
结果是
["1", undefined * 2]
, 因为map
只能被初始化过的数组成员调用 -
function sidEffecting(ary) { ary[0] = ary[2]; } function bar(a,b,c) { c = 10 sidEffecting(arguments); return a + b + c; } bar(1,1,1)
结果是
21
, 在javascript中变量中arguments
是个对象,所以arguments
和局部变量所引用的内容是一样的。 注* 使用 use strict 可避免这种情况,参见:为什么使用"use strict"可以节约你的时间 -
var a = 111111111111111110000, b = 1111; a + b;
不精确的JavaScript数字即会影响小数,也会影响大数
-
Number.MIN_VALUE > 0
Number.MIN_VALUE
是最小的比0大的数,-Number.MAX_VALUE
可能会返回给你一个最大的负整数 -
[1 < 2 < 3, 3 < 2 < 1]
隐式转换
-
2 == [[[2]]]
每一个对象都被转换成了string,最终成了
"2"
-
3.toString() 3..toString() 3...toString()
3.x
"3" 带上尾数x
toString是合法的, 但空字符串不是 -
(function(){ var x = y = 1; })(); console.log(y); console.log(x);
y
自动被声明成全局变量, 不在function的域里面. -
var a = /123/, b = /123/; a == b a === b
根据规范:正则表达式不能比较,因为每个正则都是唯一的。
-
var a = [1, 2, 3], b = [1, 2, 3], c = [1, 2, 4] a == b a === b a > c a < c
数组通过
>
和<
会安顺序比较, 但==
和===
不会; -
var a = {}, b = Object.prototype; [a.prototype === b, Object.getPrototypeOf(a) === b]
Functions 有一个
prototype
属性,但是其它对象没有,所以a.prototype
是undefined
.
每个Object
有一个内部的属性可通过Object.getPrototypeOf
访问 -
function f() {} var a = f.prototype, b = Object.getPrototypeOf(f); a === b
f.prototype
是任何被创建出来对象的父对象, 但new f
会返回Object.getPrototypeOf
继承的父对象 -
function foo() { } var oldName = foo.name; foo.name = "bar"; [oldName, foo.name]
name
只读属性. 但是赋值时为什么不会报错呢?我不知道。 -
"1 2 3".replace(/\d/g, parseInt)
String.prototype.replace
实现上每组传入的参数为1, 0
,2, 2
,3, 4
. -
function f() {} var parent = Object.getPrototypeOf(f); f.name // ? parent.name // ? typeof eval(f.name) // ? typeof eval(parent.name) // ?
"f", "Empty", "function", "function" "f", undefined, "function", error "f", "Empty", "function", error otherfunction 原型对象被定义在其它地方, 有名字, 可以被执行, 但不在当前的作用域中
-
var lowerCaseOnly = /^[a-z]+$/; [lowerCaseOnly.test(null), lowerCaseOnly.test()]
参数被会转换成字符, 因此参数为
"null"
和"undefined"
. -
[,,,].join(", ")
JavaScript在数组中允许最后一个为逗号,所以原来的那个数组定义了3个 undefined
-
var a = {class: "Animal", name: 'Fido'}; a.class
答案是: 输出需要看是什么浏览器
class
是保留字, 在chrome Firefox 和 Opera中可作为属性名, 但IE不行. 另一方面他们都可以接受其他保留字 (例如int
,private
,throws
) 作为变量,但class
不行.
- 分类
- 关键字
- OCR文字识别
- ChatGPT
- Next.JS
- ActiveX|COM+
- GPT
- TensorFlow
- mongodb
- 经济
- Python
- Git
- Rust
- TypeScript
- 数据库
- MySQL
- devops
- jQuery
- Linux
- vue
- react hooks
- css
- OnceAI旺司NAS
- arm
- OnceDB
- OnceOA
- C
- Redis
- 编程技巧
- 分享
- 心得体会
- 大话编程
- JavaScript
- JS学习
- Node.JS
- 技术前沿
- 前端
- JS开源
- 轻松一刻
- Html5
- 开源
- 行业动态
- 招聘
- 提问
- 创业
- 骇客攻防
- 展示
- 瞎扯
- 挨踢职场
- 求职面试
- OurJS
- 我要吐嘈
- 创业辛勤
- 开源OurJS
- 技术
- 订阅
- 关键字
- 全端
- 教程
如果能把有实用价值的都做对也挺NB的。
错了 从右往左计算
去1
13qwefrq
很多东西不是为了用,而是为了避免和发现bug,javascript对于新手来说最大的问题是出了bug都不知道怎么回事。
不是加减法计算。简单的说。1 + 为一元运算表达式,其后可以接数字。由于后面是 + 它有二义性,首先是 + 运算符,这里符合语法,其后是表示正数的 + ,此时为 1 + 正数后跟number。但是后面又是 + 依然是表示正数,同理 - 为负数,符合 正负性符号+数字的语法规范,以此类推到遇到数字,为一个完整的数字字母量。如:- - - - -+-+-1 为 -1。注意,这里空格很重要,是为了规避 ++ -- 自增减字面量解析,否则会被认为是 -- 或 ++ 一元运算符,导致语法错误。
因为++不能应用在数字上,只能用在变量上的
23 / 12 of 35
juuujujuj## juj ##
@最美的时光 #0、、 面试如果问这些的我看都不靠谱
@雪片 #14
貌似是计算机进制的转换,数字的精确性会不对,具体的要去算。
@雪花 #22
赞
13 / 22 of 35
@雪片 #14
js 的数字都是浮点型,是按照IEEE754规范的,
首先要知道,计算机存储的信息只有1和0,对于一个具体的数字,计算机有可能并不能精确表述该数字,这样就会有误差,计算的过程当中因为一些操作,也会导致最终的结果有误差
打开控制台,所有的答案都写在按钮的样式里面。是否有问题呢? 例如第9题:代码
Case A Case B Do not know! undefined这里都定义了correct样式了
@哇哈哈 #46
这是BootStrap的默认样式,是后来加上的,答案并无问题。
第五题,我测试了一下,如果: var name ="world"; (function(){ console.log(typeof name === "undefined"); })(); 输出的是false 也就是说会走else啊 为什么还是Goodbye呢
两位数的题号。。。样式需要修改
15 / 20 of 35
14 / 20 of 35
20/15 of 35
18
哇咔咔
23/12 of 35~
@就喜欢这种范儿 #31
大神你好。
6 / 22 of 35
@俞屯匆 #48
这题的关键在于在name在匿名函数里又被声明了一次,我们知道在javascript的同一个scope里多次声明同一个变量相当于一次声明,不会重新初始化变量值。 但是在两个不同的scope: 一个是全局变量name,另一个是匿名函数里的变量name,两者是不同的。由于hoisting的效果,匿名函数内部的name声明会提前到if判断之前,所以这里的if判断的是匿名函数内部的name而不是全局变量name,而在判断时局部变量name并未赋值(仅仅声明被前提),所以判断undefined 为ture,走第一个condition
18/35
对了14道,哎
16哎
9/26 of 35
点完几道题, 就没兴趣了,我太弱了
17 / 18 of 35
12 / 23 of 35, 使用JS快4年了,好丢人
13 / 22 of 35,哈哈~惨!
1 - - 1 = 2
@雪片 #14
浮点数吧
@叶归关 #67
此题,我总结了个规律: 首先,忽略所有的+号, 得到: 1 - - 1 然后 - - 得正,成为 + 号,得到:1 1 把最后的操作数相加,即为结果
15/20
没人发现第 32 题答案错了吗?
20 / 15 of 35
@蝶姐yrzhll #2 不对
28 / 7 of 35
@雪片 #14
因为JS中对小数不太精确,太大的数字也不精确
9 / 26 of 35
陌生的js让我窒息,然而更多的学习,让我们飞舞!
确实,很多都没有实用价值
16 / 19 of 35,第二次做还是错了3道,唉
错误:16题, 答案应为 other, 正确的计算 "5" + 3 = "53" 而不是 53,"5" - 3 = 2,因此为 "53", 2
32题"f","","function","undefined"