When you have ["string".into(), 0.into()], the array you construct is of type [JsValue; 2]. The first element is "string".into(), which, if you follow the definition, is JsValue::Str("string".to_owned()). Same for the 0. Each element is converted to a JsValue, and then an array is made out of them.
The code is equivalent to writing this: [JsValue::String("string".to_owned()), JsValue::Number(0)]. Each element is a JsValue so it compiles.
The two calls of into() look the same, but they refer to different methods.